{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "initial_id",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:47.937291Z",
     "start_time": "2025-07-04T09:27:43.812228Z"
    },
    "collapsed": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集样本数: 25000, 测试集样本数: 25000\n",
      "标签示例: [1 0 0 1 0 0 1 0 1 0]\n",
      "一个样本的词索引序列: [1, 14, 22, 16, 43, 530, 973, 1622, 1385, 65, 458, 4468, 66, 3941, 4, 173, 36, 256, 5, 25, 100, 43, 838, 112, 50, 670, 2, 9, 35, 480, 284, 5, 150, 4, 172, 112, 167, 2, 336, 385, 39, 4, 172, 4536, 1111, 17, 546, 38, 13, 447, 4, 192, 50, 16, 6, 147, 2025, 19, 14, 22, 4, 1920, 4613, 469, 4, 22, 71, 87, 12, 16, 43, 530, 38, 76, 15, 13, 1247, 4, 22, 17, 515, 17, 12, 16, 626, 18, 2, 5, 62, 386, 12, 8, 316, 8, 106, 5, 4, 2223, 5244, 16]...\n",
      "\n",
      "解码后的样本文本:\n",
      "[BOS] this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert [UNK] is an amazing actor and now the same being director [UNK] father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for [UNK] and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also [UNK] to the two little boy's that played the [UNK] of norman and paul they were just brilliant children are often left out of the [UNK] list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import tensorflow as tf\n",
    "from tensorflow import keras\n",
    "from tensorflow.keras.datasets import imdb\n",
    "\n",
    "# 加载IMDB数据集\n",
    "# num_words=10000表示只保留最常见的10000个词，本身数据集有88582个词，如果未出现词，则用<UNK>表示\n",
    "# 参数说明：\n",
    "# - num_words: 保留的最常见词的数量\n",
    "# - skip_top: 跳过最常见的若干词（通常是停用词）\n",
    "# - maxlen: 序列最大长度\n",
    "# - index_from: 词索引的起始值，默认为3\n",
    "vocab_size=10000\n",
    "(x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=vocab_size, index_from=3)\n",
    "\n",
    "print(f\"训练集样本数: {len(x_train)}, 测试集样本数: {len(x_test)}\")\n",
    "print(f\"标签示例: {y_train[:10]}\")  # 0表示负面评论，1表示正面评论\n",
    "\n",
    "# 查看一个样本的词索引序列\n",
    "print(f\"一个样本的词索引序列: {x_train[0][:100]}...\")\n",
    "\n",
    "# 获取词索引映射，返回一个字典（词典），key是词，value是索引（token）\n",
    "word_index = imdb.get_word_index()\n",
    "\n",
    "word_index = {word: idx + 3 for word, idx in word_index.items()}  # 0,1,2,3空出来做别的事,这里的idx是从1开始的,所以加3\n",
    "word_index.update({\n",
    "    \"[PAD]\": 0,  # 填充 token\n",
    "    \"[BOS]\": 1,  # begin of sentence\n",
    "    \"[UNK]\": 2,  # 未知 token\n",
    "    \"[EOS]\": 3,  # end of sentence\n",
    "})\n",
    "# 创建索引到词的映射\n",
    "reverse_word_index = {i: word for word, i in word_index.items()}\n",
    "\n",
    "# 将一个样本的索引序列转换为文本\n",
    "def decode_review(indices):\n",
    "    return ' '.join([reverse_word_index.get(i, '?') for i in indices])\n",
    "\n",
    "print(\"\\n解码后的样本文本:\")\n",
    "print(decode_review(x_train[0]))\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "7f05dccc",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:47.941967Z",
     "start_time": "2025-07-04T09:27:47.937291Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'the'"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "reverse_word_index[4]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e0159de3",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:47.945223Z",
     "start_time": "2025-07-04T09:27:47.941967Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "word_index['the']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "8c7cfacb",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:47.949052Z",
     "start_time": "2025-07-04T09:27:47.945223Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1,\n",
       " 194,\n",
       " 1153,\n",
       " 194,\n",
       " 8255,\n",
       " 78,\n",
       " 228,\n",
       " 5,\n",
       " 6,\n",
       " 1463,\n",
       " 4369,\n",
       " 5012,\n",
       " 134,\n",
       " 26,\n",
       " 4,\n",
       " 715,\n",
       " 8,\n",
       " 118,\n",
       " 1634,\n",
       " 14,\n",
       " 394,\n",
       " 20,\n",
       " 13,\n",
       " 119,\n",
       " 954,\n",
       " 189,\n",
       " 102,\n",
       " 5,\n",
       " 207,\n",
       " 110,\n",
       " 3103,\n",
       " 21,\n",
       " 14,\n",
       " 69,\n",
       " 188,\n",
       " 8,\n",
       " 30,\n",
       " 23,\n",
       " 7,\n",
       " 4,\n",
       " 249,\n",
       " 126,\n",
       " 93,\n",
       " 4,\n",
       " 114,\n",
       " 9,\n",
       " 2300,\n",
       " 1523,\n",
       " 5,\n",
       " 647,\n",
       " 4,\n",
       " 116,\n",
       " 9,\n",
       " 35,\n",
       " 8163,\n",
       " 4,\n",
       " 229,\n",
       " 9,\n",
       " 340,\n",
       " 1322,\n",
       " 4,\n",
       " 118,\n",
       " 9,\n",
       " 4,\n",
       " 130,\n",
       " 4901,\n",
       " 19,\n",
       " 4,\n",
       " 1002,\n",
       " 5,\n",
       " 89,\n",
       " 29,\n",
       " 952,\n",
       " 46,\n",
       " 37,\n",
       " 4,\n",
       " 455,\n",
       " 9,\n",
       " 45,\n",
       " 43,\n",
       " 38,\n",
       " 1543,\n",
       " 1905,\n",
       " 398,\n",
       " 4,\n",
       " 1649,\n",
       " 26,\n",
       " 6853,\n",
       " 5,\n",
       " 163,\n",
       " 11,\n",
       " 3215,\n",
       " 2,\n",
       " 4,\n",
       " 1153,\n",
       " 9,\n",
       " 194,\n",
       " 775,\n",
       " 7,\n",
       " 8255,\n",
       " 2,\n",
       " 349,\n",
       " 2637,\n",
       " 148,\n",
       " 605,\n",
       " 2,\n",
       " 8003,\n",
       " 15,\n",
       " 123,\n",
       " 125,\n",
       " 68,\n",
       " 2,\n",
       " 6853,\n",
       " 15,\n",
       " 349,\n",
       " 165,\n",
       " 4362,\n",
       " 98,\n",
       " 5,\n",
       " 4,\n",
       " 228,\n",
       " 9,\n",
       " 43,\n",
       " 2,\n",
       " 1157,\n",
       " 15,\n",
       " 299,\n",
       " 120,\n",
       " 5,\n",
       " 120,\n",
       " 174,\n",
       " 11,\n",
       " 220,\n",
       " 175,\n",
       " 136,\n",
       " 50,\n",
       " 9,\n",
       " 4373,\n",
       " 228,\n",
       " 8255,\n",
       " 5,\n",
       " 2,\n",
       " 656,\n",
       " 245,\n",
       " 2350,\n",
       " 5,\n",
       " 4,\n",
       " 9837,\n",
       " 131,\n",
       " 152,\n",
       " 491,\n",
       " 18,\n",
       " 2,\n",
       " 32,\n",
       " 7464,\n",
       " 1212,\n",
       " 14,\n",
       " 9,\n",
       " 6,\n",
       " 371,\n",
       " 78,\n",
       " 22,\n",
       " 625,\n",
       " 64,\n",
       " 1382,\n",
       " 9,\n",
       " 8,\n",
       " 168,\n",
       " 145,\n",
       " 23,\n",
       " 4,\n",
       " 1690,\n",
       " 15,\n",
       " 16,\n",
       " 4,\n",
       " 1355,\n",
       " 5,\n",
       " 28,\n",
       " 6,\n",
       " 52,\n",
       " 154,\n",
       " 462,\n",
       " 33,\n",
       " 89,\n",
       " 78,\n",
       " 285,\n",
       " 16,\n",
       " 145,\n",
       " 95]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "x_train[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3ab8ed72",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:47.954Z",
     "start_time": "2025-07-04T09:27:47.951056Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "验证集样本数: 10000\n",
      "测试集样本数: 15000\n",
      "验证集标签示例: [0 1 1 0 1 1 1 0 0 1]\n",
      "测试集标签示例: [1 1 0 1 0 0 1 0 1 1]\n"
     ]
    }
   ],
   "source": [
    "# 将测试集划分为验证集和测试集\n",
    "# 从原始测试集中取前10000个样本作为验证集\n",
    "x_val = x_test[:10000]\n",
    "y_val = y_test[:10000]\n",
    "\n",
    "# 剩余的15000个样本作为测试集\n",
    "x_test = x_test[10000:]\n",
    "y_test = y_test[10000:]\n",
    "\n",
    "print(f\"验证集样本数: {len(x_val)}\")\n",
    "print(f\"测试集样本数: {len(x_test)}\")\n",
    "print(f\"验证集标签示例: {y_val[:10]}\")\n",
    "print(f\"测试集标签示例: {y_test[:10]}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "272d907e",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:47.957402Z",
     "start_time": "2025-07-04T09:27:47.954Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[['hello', 'world'],\n",
       " ['tokenize', 'text', 'datas', 'with', 'batch'],\n",
       " ['this', 'is', 'a', 'test']]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "raw_text = [\"hello world\".split(), \"tokenize text datas with batch\".split(), \"this is a test\".split()]\n",
    "raw_text"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f2df0a9f",
   "metadata": {},
   "source": [
    "# 通过直方图来观察样本长度分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "881921a0",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:48.081569Z",
     "start_time": "2025-07-04T09:27:47.957402Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1sAAAIjCAYAAAD1OgEdAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQAApIpJREFUeJzt3QecE2X+x/HfFpbepCuIgiiiAkoTe0GxcdaznAX73y72886zd892imIvZ9ezYUNFsIFKR6pKERGRJr3u7vxf30cnJmFLMmw2meTzfr1CdieTyTzJb4f55Xme3+R5nucZAAAAAKBK5Vft5gAAAAAAQrIFAAAAAClAsgUAAAAAKUCyBQAAAAApQLIFAAAAAClAsgUAAAAAKUCyBQAAAAApQLIFAAAAAClAsgUAAAAAKUCyBQBmduqpp9pWW20V6LnXX3+95eXlVfk+IfX22Wcfd4O5GL7ggguq7fWGDx/uXlP3qVbW32h1tvfpp592rzd79uxqeT0AmYNkC0BG0wlKIrfqOGHLVIMHD7a9997bmjdvbnXq1LF27drZscceax988EGg7d1666325ptvJrz+woUL7eKLL7aOHTta7dq13X707NnTrrrqKlu5cqXlWtJer149y1QjRoxwicfSpUurdLtKIqL/HmvUqGFNmza13Xbbzf7xj3/YnDlzquy1ko3P6pTJ+wYgPfI8z/PS9NoAUKnnnnsu5vdnn33WPvroI/vvf/8bs/yAAw6wFi1aBH6dDRs2WGlpqdWsWTPp5xYXF7tbrVq1rLr9+9//tiuuuMIlW4cffrhLtn744Qf7+OOPrUuXLu4b9WQpWTjmmGMSeu6SJUts5513tuXLl9vpp5/uEq7FixfbxIkT7Z133nH3QXsMq4Pfq1VVybqSrddeey1jk0w/XmbNmrXR56Ik6fzzz7cHH3wwULK19dZb2wknnGCHHHKI+1v67bffbNSoUfb666+7bT/xxBN2/PHHR56jddavX29FRUWWn5+fkvis6G90U9qb7L6VlJS4Y4yOL/SCA7mlMN07AAAVOemkk2J+/+qrr1yyFb883urVq13ikSh9Ex9UYWGhu1U3nTzedNNNLtH88MMPN3p8wYIFKd8HnUCr1+LLL790vRjRlIDpRBq5Y5dddtnob/PHH3+0Aw880Pr372/bb7+9+xJAlGCl+guKVatWWd26ddP2N+orKChwNwC5h2GEAEJPvRM77rijjRkzxvbaay+XZGnokrz11lt26KGH2uabb+6+VW7fvr1LUPRNc0VztvxhUeoJePTRR93z9PwePXq4b+sTnQ+iIUXaNz13hx12KHNon3pVunfv7k489TqPPPJIQvPAFi1a5BKa3XffvczHNZwv2rp16+y6666zbbbZxu1PmzZt7Morr3TLo/dbJ6jPPPNMZEiY3pvyzJgxw51E7rrrrhs91qBBg5iT6c8//9z++te/2pZbbhl5/UsuucTWrFlT5lA8JXGHHXaY+3mLLbawgQMHuse//fZb22+//dxJdNu2be2FF14oc37MZ599Zv/3f/9nTZo0cftyyimnuN6WyiTyPm2qr7/+2g466CBr2LChi1f1TCphjebHgHoq9Z40atTIrX/aaae5LxOi6T286KKL3NC9+vXr21/+8hf7+eef3fO1HX976tUS9UL5n2/8PKJEYjYZ+oz0magX684776xwztb3339vRx99tLVs2dLFTuvWrV1v2LJlyyqNT//9mjJliv3tb3+zxo0b2x577BHzWFmef/5522677dzrdevWzcVNIvM547dZ0b6VN2froYcecu+x3msdo9TTFj/E0z++qV377ruvixf9PUS/lwAyFz1bALKChq4dfPDB7sRM36z7Qwp1kqOT9UsvvdTdf/LJJ3bttde6JOWuu+6qdLs6kV+xYoU7adfJkk5wjjrqKJs5c2alvWFffPGFG0J13nnnuRPg//znP+5EUkmEEgAZN26cO+lu1aqV3XDDDS4JvPHGG61Zs2aV7puSKc2R0pytCy+80DbbbLNy19WQLZ2Aa5/OPvts18OgpOXee++17777LjLPRMMzzzzzTDfnSuuJEsCKTqS1z3qeei4q8uqrr7ok4dxzz3Xt/+abb+yBBx6wuXPnuseiaZv6PJU86z3XCbGSVyVY//znP+3EE090n8OgQYNcEtW7d2+XQETT+kpQdFI8ffp0e/jhh10vi3+Svynv06ZQDKptOrFXUqcenqeeesolkEpI9d5H0/w7te22226zsWPH2uOPP+4++zvuuCOyjk7qX3nlFTv55JNd4vvpp5+6Lxmi6f1SG1588UXXHiVmEh1ricRsEPp8FEfqlS6PkrG+ffu6pFbxrIRLCaOGoyoBUaKZSHwqoe/QoYObP1XZTAm9Ty+//LJLVJXwKPnR36NiUwlOMpL921Fc6m++T58+7m/Cj1F9maPEO/r4oi8JtF/6DBUPGqqqOZE77bSTiyUAGUxztgAgLM4//3ydPcUs23vvvd2yQYMGbbT+6tWrN1r2f//3f16dOnW8tWvXRpb179/fa9u2beT3WbNmuW02adLEW7JkSWT5W2+95ZYPHjw4suy6667baJ/0e1FRkffDDz9Elk2YMMEtf+CBByLL+vXr5/bl559/jiz7/vvvvcLCwo22WZZrr73WrVe3bl3v4IMP9m655RZvzJgxG6333//+18vPz/c+//zzmOV6z/T8L7/8MrJM29L7kYj58+d7zZo1c9vo2LGjd84553gvvPCCt3Tp0oQ+i9tuu83Ly8vzfvzxx8gyvba2d+utt0aW/fbbb17t2rXdui+99FJk+bRp09y6+gx8Tz31lFvWrVs3b/369ZHld955p1uuzzA6dnQL8j6VRfuu9688paWlXocOHby+ffu6n6Pfm6233to74IADNoqr008/PWYbRx55pItLnz5vrTdgwICY9U499dSN3pu77rrLLVN8x0s0Zsvi/71o++U5/PDD3TrLli1zvw8bNsz9rnsZN26c+/3VV1+t8LXKi0///TrhhBPKfSy+vbqNHj06skxxWKtWLfcel3dsqGib5e2bH5P++75gwQL3Xh944IFeSUlJZL0HH3zQrffkk09udHx79tlnI8vWrVvntWzZ0jv66KPLeZcAZAqGEQLICvpWWsOr4qnnx6ceKg2923PPPV0Py7Rp0yrd7nHHHeeGI/n0XFHPVmX0jXX0N9udO3d2w9n856r3RoUsjjjiCDeEyKfha4l+W61vxtX7piIVQ4YMcb0+6jHR3JmpU6dG1lPPkXppVMBC74F/U2+KDBs2zIJQD+KECRPsnHPOcd++q6dJQ7jU86LhmtE9C9GfhYZb6fU1z0vrqIcvnnoJfOqh0lAv9Wzpm32flumxsj4P9S5E9w6o90Dzdt57771y25Oq98k3fvx4N1RO75F6Y/3t6/3Yf//93RA29a5F03sbTTGo56p3VvxhfuqNiqbeoWRVFrObwq/SqL/DsqjnShTH8cMkkxH/flXW46a/F5+GuKrQjPYhfqhxVdLfvXryBgwYEFMc5KyzznLv97vvvrvRexc9F05zIdWDVhWfC4DUItkCkBU0h6GsYgyTJ0+2I4880p3I6SRG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S6733XdfGz9+vA0YMMDOPPNMGzJkiHtc8fLOO+/YZZddZtddd52NHTvWunTpYn379rUFCxaU+5ojRoywE044wc444wwbN26ce03dJk2alNK2kmyFhA4AS5cuzbgLEiLzETNIBscaBEHchNCqVeXf1q5NfN34QgXlrVdBclNe3OhizC+//LKde+657uQ7unfjb3/7mx133HEx66tEd9OmTe3ZZ5+NVKy77bbbbOutt3aVMnVC/tprr8X0nujE/f3337du3bq5XpQvvvjCZsyYYYcffri1aNHCXdBWXyR8/PHHMa+lBEH7pO1q+y+88ILrZbnvvvsi6+hvQkmCSog3aNDA9ttvP5swYYJtiscff9y233571zOjHpqHHnoo8pjKlKs9r7/+uktUdB0qtVm9g9Eee+wxa9OmjXv8yCOPtHvuuccaNWrkHtN7fMMNN7j99Hudot/3RYsWuefoubr+1Ntvvx2oHY0aNbKWLVtGbn4pdxk0aJB7T++++27X1gsuuMCOOeYYu/fee93jihc9pvf2tNNOs06dOrnnaJ+efPLJcl/z/vvvt4MOOsiuuOIKt92bbrrJ9Z49+OCDllIeKrVs2TIdBdx9umzYsMEbOXKkuwcqtXKl/utytw1Ll6Z7bxAiHGsQBHGTudasWeNNmTLF3cf44/+IMm+HHBK7bp065a+7996x6zZtWvZ6ZSgtLfVWrFjh7svyxBNPeN27d3c/Dx482Gvfvn1k3XfeecerXbu2e75P62jZ8uXL3e8333yz17FjR++DDz7wZsyY4T311FNezZo1veHDh7vHhw0b5s7vOnfu7H344YfeDz/84C1evNgbP368N2jQIO/bb7/1vvvuO++aa67xatWq5f3444+R1+rTp4/XtWtX76uvvvLGjBnj7b333u6177333ph1+vXr540aNcpt57LLLvOaNGniXqM82p833nijzMeee+45r1WrVt7//vc/b+bMme5+s802855++mn3+KxZs9zz1Wa9P9OnT/eOOeYYr23btpG/zS+++MLLz8/37rrrLvf4wIED3TYaNmzoHl+9erXbzx122MH75Zdf3E3L/H1r3bq198ILL3jff/+9d9FFF3n16tWLaY9e67rrriu3ff52Nt98c/de9OjRw33O0TGw5557ehdffLEX7cknn/QaNGjgfl67dq1XUFDgvf766zHrnHLK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0k477bSEnnv33Xe7E8xx48bZeeedZ+eee65Nnz490H5oKN1+++3nkiAVGvjggw/s119/tWOPPTZmvWeeecbq1q1rX3/9td15551244032kcffeQeU3ECDVOsU6eOe1zJ3z//+c+Y53/zzTfuXknYL7/8EpNoDhs2zGbMmGHvvfeePf3005GbT4mdkkwg7Mcbkq2Q0EFt4sSJoam8gjSrUcNK//Uvm3vGGVaSz585EsexBkEQN4k56aST7IsvvrAff/zR3b788ku3LBGHHHKIS7K22WYbu+qqq6xp06YuYQniwQcfdImWess6duzoflbip+199913kfV0LaPrrrvOOnToYKeccopL9oYOHeoeU9KlZOnZZ5+1Ll26uB6uW265JeZ1mjVr5u41p0o9Y+oh8zVu3Njuv/9+W7dunethO/TQQyPbFrWvffv2gdqH7FYSsuMN19kCslFRkZVee63NHT3aWoboWhQAkM2UfCipUA+O53nuZyUViVDi49OQPCUvCxYsCLQfEyZMcImVhhDGUwK17bbbbvSa0qpVq8hrqldNwyK1H76ePXsmvA877LBDzDAwbfvbb7+N/H7BBRe4GxB2JFsAAADVOJTQTyIGDhyY8PNq1KgR87sSrtLS0kD7sHLlSuvXr1+ZhSWU9KTiNeOlcttAJiHZCpGwTAREBtB/WJMnW93ZszUrO917g5DhWIMgiJvEqDKe5psouejbt2/ainX873//c3OiCguDnQput9129tNPP7m5XipwIaNGjYpZp+iPkRUVDfcibhBEmOKGZCskdDDs0aNHuncDYbFmjRV27Wo76eeVK92wQiARHGsQBHGT3Eni1KlTIz+n0rJlyza69pTmT6ny32OPPWYnnHBCpNrgDz/84ErTP/744wnt1wEHHODmVPXv398Vz1ixYoVdc8017jElktK8eXOrXbu2K8DRunVrV7WwYcOGCcWN5pW98cYbMfO44i1ZssTmzJlj8+bNc7/7BUM0tNEf3jh//nx3U/tEQxX9io7Rc8gQHoUhO94wcz4kNLZb1YN0DySDmEEyONYgCOImObrArm6pNnz4cFf8Ivp2ww032Oabb+6Kc6jHSRcF3mmnnVyJ9EaNGll+gkWVlJCpxLuGJOrE98wzz4xUI1RS5Z8U/+c//7FHHnnEvebhhx+ecNyoDL3mj1Xk7bffdm3S3Dc5/vjj3e+DBg2KrKOfteyss85yv++1117udz0X4eSF7HiT54VlT9No+fLl7psYfUNUHQfHshQXF7vyrKoEFLTLf1P06xfseYMHV/WeICGrVpn9MfG5eOlSK4z6JhHI5GMNwom4gSiBU1VC9SIlUkmQuEEQmRA3yeQGRDYAAACSpmF+qmio0vBKsC6++GLbfffdKdkORCHZAgAAQNI0T0vX/NK8KZWw79Onj7v4MoA/kWyFhCabapKpP+kUSBQxg2RwrEEQxE1u0oWOdQuKuEEuxA1ztkIyZyvdmLMV3jlbrhph3brp3iMAAICcyw2oRhgSutCfrtrOBf+QkBo1zLvsMlt13nlWGqJrUSD9ONYgCOIGQRA3yIW4IdkKCQXUzJkzQxNYSLOiIiu5/Xb79uSTrZQKT0gCxxoEQdwgCOIGuRA3JFsAAAAAkAIkW0A20rc9s2dbzV9++f1nAAAAVDvGF4WEKq5oIl5YKq8gzdasscIOHWxnMytZtswNKwQSwbEGQRA3CIK4QS7EDclWSBQUFNj222+f7t1ASGMHSBTHGgRB3CAI4ga5EDcMIwwJTQKcO3duaCYDInMQM0gGxxoEQdwgCOIGuRA3JFshEbbAQuYgZpAMjjUIgrhB2OJGQ9DefPPNan9d5N7xhmQLAACgGowcOdINgTr00EMtF2RCQnP99ddb165dU9rG+NtLL70Us87w4cNtl112sZo1a9o222xjTz/99EbbGThwoG211VZWq1Yt69Wrl33zzTeVvvarr75qHTt2dM/Zaaed7L333qvStqFqkGwBAABUgyeeeMIuvPBC++yzz2zevHkpfS3P86y4uDilr4HfPfXUU/bLL79EbkcccUTksVmzZrnket9997Xx48fbgAED7Mwzz7QhQ4ZE1nn55Zft0ksvteuuu87Gjh1rXbp0sb59+7oL95ZnxIgRdsIJJ9gZZ5xh48aNc6+p26RJk1LeXoQs2fr555/tpJNOsiZNmljt2rVdZj569OiYg8W1115rrVq1co/36dPHvv/++5htLFmyxE488URr0KCBNWrUyAXeypUrY9aZOHGi7bnnni77b9Omjd15550WJvn5+dasWTN3DySDmEEyONYgCOKmcjov0Un1ueee606+o3s3/va3v9lxxx0Xs/6GDRusadOm9uyzz7rfNWTqtttus6233tqdD+mE/LXXXovpPVGvyvvvv2/dunVzvShffPGFzZgxww4//HBr0aKF1atXz3r06GEff/xxzGspQdA+abva/gsvvOB6We67777IOkuXLnVJgj5nnW/tt99+NmHChE16T5588kl3Dqj9Ug/NQw89FHls9uzZrj2vv/66S1Tq1Knj2qzewWiPPfaYO6/T40ceeaTdc8897lxQ9B7fcMMNbj/9Xqfo933RokXuOXpuhw4d7O233w7UDr1ey5YtIzeda/oGDRrk3tO7777bFXW44IIL7JhjjrF77703so72+ayzzrLTTjvNOnXq5J6jfdL7U57777/fDjroILviiivcdm+66SbXe/bggw9atssP2fEmrXv522+/2e677241atRwB4cpU6a4YGzcuHFkHSVF//nPf1zgff3111a3bl2X7a9duzayjhKtyZMn20cffWTvvPOO+8bo7LPPjjy+fPlyO/DAA61t27Y2ZswYu+uuu1y38qOPPmphoYBq3759aAILaVZYaHbeee6WT9l3JIFjDYIgbir3yiuvuIRiu+22cwmGTqT1hbJ/HjN48OCYL4rV87F69WqXDIgSLSVeOh/SOc8ll1zitvPpp5/GvM7f//53u/32223q1KnWuXNnt81DDjnEhg4d6npAdILer18/mzNnTuQ5p5xyiutpU8L2v//9z50fxfeq/PWvf3XLdL6mcymd2O+///7uC+8gnn/+eXcupvM87eutt95q//rXv+yZZ56JWe+f//ynXX755a5XaNttt3W9OX6P3ZdffmnnnHOOXXzxxe7xAw44wG655ZbIc5XAXnbZZbbDDjtEep2ik1olYscee6z7Ql7vkT6H6PYo4dQ+Vub88893iXHPnj1jPldRcqiOgmg6j/WTxvXr17v3M3od/R3p9/jEMlpl281m+WE73nhpdNVVV3l77LFHuY+XlpZ6LVu29O66667IsqVLl3o1a9b0XnzxRff7lClTFNHeqFGjIuu8//77Xl5envfzzz+73x966CGvcePG3rp162Jee7vttktoP5ctW+ZeQ/fpUlJS4v3www/uPh0OOyzYDV7OxgzCibhBEMRN5XbbbTfvvvvucz9v2LDBa9q0qTds2LCY35999tnI+ieccIJ33HHHuZ/Xrl3r1alTxxsxYkTMNs844wy3nmhbOld58803K92XHXbYwXvggQfcz1OnTt3oPOr77793y+699173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OXJAZYgZJINjDYIgbhAEcYNciJukk6077rjDrrzyShs+fLgtXrzYli9fHnNDaiigFi5cGJrAQuYgZpAMjjUIgrhBEMQNciFukh5G2KdPH3evCxtHo0AGAAAAAGxCsjVs2LBknwIAAAAAOSfpZGvvvfdOzZ6g0smArVu3ptgBElO3rpWWlPx+hfX69dO9NwgRjjUIgrhBEMQNciFukk62Pvvsswof32uvvTZlf1BJYAGJImYQBHGDIIgbBEHcIBfiJulka5999tloWfS1tpizlRp6X7/77jvbdtttraCgIN27gxAgZhAEcYMgiBsEQdwgF+Im6f633377Lea2YMEC++CDD6xHjx724YcfpmYv4QqQLFu2zN0DlVq71vKOO86an3++eWvWpHtvECIcaxAEcYMgiBvkQtwk3bPVsGHDjZYdcMABVlRUZJdeeqm74DGANCspsfz//c+amFkxvc0AAABpUWUzy1q0aGHTp0+vqs0BAAAAQKgl3bM1ceLEmN/VhffLL7/Y7bffbl27dq3KfUPcZMB27dqFpvIKMgcxg2RwrEEQxA2CIG6QC3GTdLKlhEoFMeLHSe6666725JNPVuW+IYoCqnnz5uneDYRQWA5GyAwcaxAEcYMgiBvkQtwknWzNmjVrowY3a9bMatWqVZX7hTIqr0yaNMl23HHHUFReQWbFDhGDRHGsQRDEDYIgbpALcZN0stW2bdvU7AkqpJ7ENWvWhKbyCjIHMYNkcKxBEMQNgiBukAtxE2h80aeffmr9+vWzbbbZxt3+8pe/2Oeff171ewcAAAAAIZV0svXcc89Znz59rE6dOnbRRRe5W+3atW3//fe3F154ITV7CSA5depY8dKl9s0nn7ifAQAAEIJk65ZbbrE777zTXn755UiypZ9VjfCmm24KvCN6vgpvDBgwILJs7dq1dv7551uTJk2sXr16dvTRR9uvv/4a87w5c+bYoYce6pI/TZa74oorrLi4OGad4cOH2y677GI1a9Z0PXFPP/20hY3GpHbs2DEUY1ORAfLyrKBBA9t2552toDDp0cLIYRxrEARxgyCIG+RC3CSdbM2cOdMNIYynoYTxxTMSNWrUKHvkkUesc+fOMcsvueQSGzx4sL366qtu6OK8efPsqKOOipkgp0Rr/fr1NmLECHvmmWdcInXttddG1tE+aZ19993Xxo8f75K5M888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1Fyt1atXW/v27a1OnTobFchYsmRJVe4fAAAAAORGsnXfffelZk9QIY1J7dixYyjGpiKzEDNIBscaBEHcIAjiBrkQN4GqEaL6qepjo0aN0r0bCItatcyGDXM/5tWune69QYhwrEEQxA2CIG6QC3GzSTWh165da8uXL4+5ITWKi4tt1KhR7h6oVEGBFe+xh42qW9eKQzKBFJmBYw2CIG4QBHGDXIibpJOtVatW2QUXXODq29etW9caN24cc0NqS10CySBmEARxgyCIGwRB3CDb4ybpZEuVCD/55BN7+OGHrWbNmvb444/bDTfcYJtvvrk9++yzqdlLAMnZsMHyHnrIWrz2mvsZAAAAIZizNXjwYJdU7bPPPnbaaafZnnvuadtss421bdvWnn/+eTvxxBNTs6cAErd+vRVcfLFtre72f/3LjHlbAAAAmd+zpdLu7dq1cz/r4sZ+qfc99tjDPvvss6rfQziquNK5c+fQVF5B5iBmkAyONQiCuEEQxA1yIW6STraUaM2aNcv9rLKLr7zySqTHK0yVQcKoqKgo3bsAIAdwrEEQxA2CIG6Q7XGTdLKloYMTJkxwP//973+3gQMHWq1ateySSy6xK664IhX7iD8mAo4ePTpUEwKRGYgZJINjDYIgbhAEcYNciJukky0lVRdddJH7uU+fPjZ16lR74YUXbNy4cXbxxRcntS0V2VA3oIYj6ta7d297//33Y0rLn3/++dakSROrV6+eHX300fbrr7/GbGPOnDl26KGHWp06dVyFRCV88aUghw8fbrvssosr6KH5ZU8//XSyzQYAAACA6rvOlmy11VZ21FFHuaQpWa1bt7bbb7/dxowZ4zLU/fbbzw4//HCbPHlyJLHT8MRXX33VPv30U5s3b557LZ8yWiVa69evtxEjRtgzzzzjEqlrr702so6GPGqdfffd18aPH28DBgywM88804YMGbKpTQcAAACATU+2Ro4cae+8807MMlUl3HrrrV2P0tlnn23r1q2zZPTr188OOeQQ69Chg2277bZ2yy23uB6sr776ypYtW2ZPPPGE3XPPPS4J69atmz311FMuqdLj8uGHH9qUKVPsueees65du9rBBx9sN910kxvaqARMBg0a5Pbx7rvvtu23395dI+yYY46xe++9N6l9BQAAAICUlH6/8cYbXbn3ww47zP3+7bff2hlnnGGnnnqqS2Luuusud62t66+/3oJQL5V6sHTRZA0nVG/Xhg0b3FBFnwpybLnlli7x23XXXd39TjvtZC1atIis07dvXzv33HNd79jOO+/s1onehr+OerjKo6QxOnFcvny5u9fwRH+IYn5+vruVlpa6m89frvZ4nlfpclVSycvL22joo19hxR+PqueoPdqGfo4fp1pYWLjRcm1X24nfx/KWV9Qm5eUFBdr2n/teWqp9KWt5gXmeXiO2TSUlv7fp9/UrXq63I9VtSsXnVNnyamuTXv/NN91r5deqFdmXULcpGz+nDGyTf6zJpjZVtJw2VU2b9Dx9KartxK8f1jZVtJw2VU2btJ3u3bu7n6P3P8xtysbPKRPbtMsuu7jnpOu8PP7xKkm2NARPvUa+l156yXr16mWPPfaY+71NmzZ23XXXJZ1sKWlTcqX5WerVeuONN6xTp07u9VRpJL7CoRKr+fPnu591H51o+Y/7j1W0jhKoNWvWWO0yrj902223uQs1x9O8tLp167qfmzVrZu3bt3fDFBcuXBgzNFK37777zvXORVdxVA/gpEmT3OtGJ5Bqo7YdHWQalqn2a3ilT4/37NnTJaETJ06MCYAePXq415s2bVpkudrWpUsXW7Rokc2cOTOyvGHDhi5B1rDMuXPnRpZX1Caz1taly3fWtOmfbZo8uZ39/HNz69VrktWr92ebxozpaIsXN7K99x5nhYV/tunLLzvb2rVFtv/+f7ZJhg7tbrVqrbfdd/+zTePGpb5NqfqcRP95qHe1uj+nmDa1aOH2dZulS13MZ0WbsvFzysA2aQ6svsjKpjZl4+eUaW3aYYcd3MmL/l/PljZl4+eUSW3SyKP69evb999/nzVtysbPKdPa1LFjR/vpp59i9r2626TOoUTledHpXAVUcVB/DEqq/OtqadjeP//5T/f77Nmz3X/OK1assGToTVeRC70Br732mj3++ONufpaSLVU+jB+aqGRD86/uuOMON3Txxx9/jJl/tXr1apcQvffee27/NDxR27n66qsj6+gxzePSumUlW2X1bKndixcvdoU80pFB637s2LEuUPUNQHV/03H44dXbs/Xaa3x7s6lt8mNG3zbrAJENbapsOW3a9Db5caP//Pz9D3ubKlpOm6qmTdH/R+k52dCmipbTpqppk9ZR3Pi96dnQpmz8nDKtTZ7n2ahRo1zvlr/N6m6TcgMV8FP+4ucGm9yzpW/GlS0q6VCCpD+O6N4fJVk1atSwZOkkUBUCRSeFevPuv/9+O+6449zrLF26NKZ3S9UIW7Zs6X7W/TfffBOzPb9aYfQ68RUM9bvemLISLVHVQt3iKRh0i+Z/WPGiDxqJLI/fblnL9eH7t7LWL295efuY7HI/KUp8eWHg5X4zUt2mVHxOlS2vljZt2GB5zz1nzWfPtvyuXbOjTWWgTalpk3+ynE1tCrqcNiW+7+n8/4nPKZxt8k9otbys1w1jmypbTptsk9ukuPGTsXSdl5f3+CYVyFAhC11X6/PPP3e9RBpmsueee0YeV5eguu82lbJR9Sop8VLyNnTo0Mhj06dPd71gGnYoutdwhQULFkTW+eijj1wipaGI/jrR2/DX8bcBZKX1663gzDOt/c03u58BAABQ/RJOyzRfS2XX9957bze3SmXWo6/e/OSTT9qBBx6Y1IsradNQPxW9UM+Yrtela2JpWKDGZKoAx6WXXmqbbbaZS6AuvPBClySpOIbo9ZRUnXzyyXbnnXe6+VnXXHONuzaX3zN1zjnn2IMPPmhXXnmlnX766fbJJ5/YK6+8Yu+++66FTXnZNwBUJY41CIK4QRDEDbI9bhKes+XT2EQlW/GNXLJkiVsenYBVRsmUep1++eUXl1xp8tlVV11lBxxwgHtcRTMuu+wye/HFF11vl6oIPvTQQ5EhgqI5W6o+qCRNc7X69+/vrt0V3b2nx3TNLpWJ1yS5f/3rX66KYqI0LlP7l8i4zGzVr1/1vt7gwdX7ellHEzfr1fv955Urzf4o7AIAAIBNk0xukHSylYsyIdnSx6TX137ETz6uDiRb4U22vBUrLM9PvIAMP9YgnIgbBEHcIKxxk0xukPCcLaSXqp+oJGZ8BRegMsQMksGxBkEQNwiCuEEuxA3JFgAAAACkAMkWAAAAAKRA4kXikVYak6rrgjGmGQmpWdNKXnrJfpozx9rUqpXuvUGIcKxBEMQNgiBukAtxQ4GMkBTISDcKZAAAAABGgYxspIs96+LNugcSQcwgCOIGQRA3CIK4QS7EDclWSCigZs6cGZrAQpoVF5v3yiu29LHHrHT9+nTvDUKEYw2CIG4QBHGDXIgb5mwB2WjdOis44QTbVnnXBReYMW8LAACg2tGzBQAAAAApQLIVEqq4whXWEQQxg2RwrEEQxA2CIG6QC3HDMMKQKCgosO233z7du4GQxg6QKI41CIK4QRDEDXIhbujZCglNApw7d25oJgMicxAzSAbHGgRB3CAI4ga5EDckWyERtsBC5iBmkAyONQiCuEEQxA1yIW5ItgAAAAAgBZizBWSjoiIrefxxmz17trUtKkr33gAAAOQkkq2QyM/Pt2bNmrn7XNCvX7DnDR5c1XsSUjVqWN5pp5nNmmX5NWume28QIrl2rEHVIG4QBHGDXIibPM/zvHTvRKZbvny5KzG5bNkya9CggeWioMlPdSPZAgAAQKbkBuFICeEmAc6YMSM0kwGRZsXFVjp4sP3y+ONWun59uvcGIcKxBkEQNwiCuEEuxA3JVkgooBYuXBiawEKarVtn+X/5i7U66ywrXbMm3XuDEOFYgyCIGwRB3CAX4oZkCwAAAABSgGQLAAAAAFKAZCskVHGldevWoam8gsxBzCAZHGsQBHGDIIgb5ELcUPo9ZIEFJCssByNkBo41CIK4QRDEDXIhbjgLC4mSkhKbOnWquweSQcwgGRxrEARxgyCIG+RC3NCzFRK6HJpq+W/qZdHCcr0sVB0upYd0HGuQW4gbBEHcIBfihmQLyEZFRVZy//02Z84ca1NUlO69AQAAyEkkW0A2qlHDvPPOs19Hj7Y2NWqke28AAAByEnO2QjQZsF27dhQ7QMKIGQRB3CAI4gZBEDfIhbgJx17CBVTz5s1DE1hIs5ISy//sM2s+ZYrlh2RMMzIDxxoEQdwgCOIGuRA34dhLuIorEyZMCE3lFaTZ2rVm++7rbiWrVqV7bxAiHGsQBHGDIIgb5ELckGyFhCqurFmzJjSVV5A5iBkkg2MNgiBuEARxg1yIG5ItAAAAAEgBki0AAAAASAGSrZAoKCiwjh07unsgGcQMksGxBkEQNwiCuEEuxA3X2QqJvLw8a9SoUbp3AyGNHSBRHGsQBHGDIIgb5ELc0LMVEsXFxTZq1Ch3DySDmEEyONYgCOIGQRA3yIW4oWcrRMJS4hIZoEYNK7n9dpv700+2RY0a6d4bhAzHGgRB3CAI4gbZHjckW0A2Kioy77LL7JfRo22LoqJ07w0AAEBOYhghAAAAAKQAyVZIqOJK586dQ1N5BWlWUmIFY8da1w0bjIhBMjjWIAjiBkEQN8iFuGEYYYgUMRwMiVq71vJ69bJautL6ihVm9eqle48QIhxrEARxgyCIG2R73NCzFaKJgKNHjw7VhEBkBmIGyeBYgyCIGwRB3CAX4oZkCwAAAABSgGQLAAAAAFKAZAsAAAAAUiDP8zwvFRvOJsuXL7eGDRvasmXLrEGDBmnZB31MGpuqyit5eXmBt9Ovn2W1wYPTvQcZYtWqSFEMFcjIo0AGqvlYg9xC3CAI4gZhjZtkcgN6tkJk/fr16d4FADmAYw2CIG4QBHGDbI8bkq2QUAY/ceLE0FReQZrVqGGl//qXzT3jDCvJ588cieNYgyCIGwRB3CAX4obrbAHZqKjISq+91uaOHm0tQ3QtCgAAgGzCV94AAAAAkAIkWyGiiYBAQkpLzSZPtrqzZ//+M5AEjjUIgrhBEMQNsj1uqEYYkmqEVYVqhLlXjdBWrjSrWzfdewQAAJAVQlON8LbbbrMePXpY/fr1rXnz5nbEEUfY9OnTY9ZZu3atnX/++dakSROrV6+eHX300fbrr7/GrDNnzhw79NBDrU6dOm47V1xxhRUXF8esM3z4cNtll12sZs2ats0229jTTz9tYaKceOnSpe4eSAYxg2RwrEEQxA2CIG6QC3GT1mTr008/dYnUV199ZR999JFt2LDBDjzwQFulb+X/cMkll9jgwYPt1VdfdevPmzfPjjrqqMjjqkSiREslIEeMGGHPPPOMS6SuvfbayDqzZs1y6+y77742fvx4GzBggJ155pk2ZMgQCwu1c9q0aaGpvILMQcwgGRxrEARxgyCIG+RC3KS1GuEHH3wQ87uSJPVMjRkzxvbaay/XNffEE0/YCy+8YPvtt59b56mnnrLtt9/eJWi77rqrffjhhzZlyhT7+OOPrUWLFta1a1e76aab7KqrrrLrr7/eioqKbNCgQbb11lvb3Xff7bah53/xxRd27733Wt++fTfar3Xr1rlbdFehqLfM7zHLz893t9LSUnfz+csVANEZd3nL/QuyxffE+WNR/UDyn+ff4gOssLBwo+XarrYTvY+/bzbPSkr0uqWWn//nvnue2qP9LHWP+bRMjxUUaNteAssLzPP02rFt0mv+vg8lCS4vtLw8z/Lzo5eXve/+8vI+j+r6nCpbnujnVNHyhNpUXBz54/bXCX2bsvFzysA2Rb9+trSpouW0qWraFP1/VPz6YW1TRctpU9W0Kfq4E7+PYW1TNn5OmdYmiV+/utsU/3hoSr8ruZLNNtvM3SvpUm9Xnz59Iut07NjRttxySxs5cqRLtnS/0047uUTLpwTq3HPPtcmTJ9vOO+/s1onehr+OerjKG954ww03bLR83LhxVvePuS/NmjWz9u3bu16zhQsXRtZp3bq1u3333XeR9ki7du1cIjlp0iRbs2ZNTHsaNWrkth0dNJ07d3aJ4ujRo2O6TBVAer6uLxAdABqOqddTpu+rXbu2denSxRYtWmQzZ850y/bf32zRooY2duz21q7dPGvffm5k/Z9/bmaTJ7e37befZVts8WebZsxo7W5dunxnTZv+2abJk9vZzz83t169Jlm9en+2acyYjrZ4cSPbe+9xVlj4Z5u+/LKzrV1bZPvv/3ubfEOHdrdatdbb7rv/2abi4gL75JMettlmy6xbtz/btHJlbRsxoottvvki22GH39skfpvU8zl37p9tqu7Pyde9e3fX2xr0cxKNBdYXA0HatGL+fOv5x/IlS5ZYy8aNQ9+mbPycMrFNOtb4owuypU3Z+DllWpv8kxUN/df/vdnQpmz8nDKtTW3btnX3+tI8+kvuMLcpGz+nTGtThw4d3LFm7NixkeSrutsUPQovNAUylET85S9/cQmFep1EPVqnnXZazB+g9OzZ0w0JvOOOO+zss8+2H3/8MWZI4OrVq11S9N5779nBBx9s2267rdvO1VdfHVlHj2loodbVB1pZz1abNm1s8eLFkUlw1Z1B6zX0H5gSSz0W9FuBY47J7p6tt97Krm9vAn8jtXKlFTZq5JZv+O03q9GoUfjblI2fUwa2yT/W6D8WPZ4NbapoOW2qmjbpdXTCvOOOO8asG+Y2VbScNlVNm/Sz4kYJgR7PhjZl4+eUaW2Sb7/91jp16hSJm+puk3ID1ZNIpEBGxvRsae6Wsks/0UonFdHQLZ6CQbdo/ocVz/9QEl0ev92ylquXrqL1FRxlLY/ex+j4VqJUUrLxviuJKms6n58UJb68cJOXK2kre3nZ+17e51Gdn1NlyxP5nDZludv3qO3XqFHjz+WbuO9pbVMZaFNq2hR9rMmWNgVdTpsS33cN4y9PWNtU0XLaVDVtUu9FecLapoqW0yarkjaVd7yprjaV93iZ+2QZ4IILLrB33nnHhg0b5rr6fC1btnTdjertiqZqhHrMXye+OqH/e2XrKBON79XKVMrSFyxYEJOtA+WqUcO8yy6zVeedZ6UhuhYF0o9jDYIgbhAEcYNciJu0JlvqtlOi9cYbb9gnn3ziilhE69atm/tWfujQoZFlKg2vUu+9e/d2v+teXYl6032qbKhESt2L/jrR2/DX8bcRBgoojVkNS2AhzYqKrOT22+3bk0+20iS+fQE41iAI4gZBEDfIhbgpTPfQQc3Leuutt9y1tubPnx+Z/KYeJ92fccYZdumll7qiGUqgLrzwQpckqTiGqFS8kqqTTz7Z7rzzTreNa665xm3bHwp4zjnn2IMPPmhXXnmlnX766S6xe+WVV+zdd99NZ/MBAAAAZLG09mw9/PDDbmLZPvvsY61atYrcXn755cg6Ks9+2GGHuYsZqxy8hgS+/vrrMWMtNQRR90rCTjrpJDvllFPsxhtvjKyjHjMlVurN0thglYB//PHHyyz7DmQFfdsze7bV/OWX338GAABAbvVsJVIIsVatWjZw4EB3K49Kh6q6YEWU0KmMY1hp4qB6+vwqLECF1qyxwg4dTGUOSlTqtKgo3XuEkOBYgyCIGwRB3CAX4obJHCGhnjuVRgWSVV6lHaAsHGsQBHGDIIgb5ELcZEQ1QlROkwB1QbqwTAZE5iBmkAyONQiCuEEQxA1yIW5ItkIibIGFzEHMIBkcaxAEcYMgiBvkQtyQbAEAAABACpBsAQAAAEAKkGyFRH5+vjVr1szdA8kgZpAMjjUIgrhBEMQNciFuqEYYEgqo9u3bp3s3EBaFhWbnned+zKfsO5LAsQZBEDcIgrhBLsRNOFJCuEmAM2bMCM1kQKRZzZpW+sADNuPSS620Ro107w1ChGMNgiBuEARxg1yIG5KtkFBALVy4MDSBhfQjZhAEcYMgiBsEQdwgF+KGYYTIKv36BXve4MGWXTzPbOFCK/ztt99/BgAAQLUj2QKy0erVVrj55tbdzIqXLjVr2DDdewQAAJBzGEYYosmArVu3Dk3lFWQOYgbJ4FiDIIgbBEHcIBfihp6tkAUWkKywHIyQGTjWIAjiBkEQN8iFuOEsLCRKSkps6tSp7h5IBjGDZHCsQRDEDYIgbpALcUOyFRKe59myZcvcPZAMYgbJ4FiDIIgbBEHcIBfihmQLAAAAAFKAZAsAAAAAUoACGSGaDNiuXTuKHSAxhYXmnXKKrV23zmoWFaV7bxAiHGsQBHGDIIgb5ELckGyFhAKqefPm6d4NhEXNmpb3zDNWO937gdDhWIMgiBsEQdwgF+ImHCkhXMWVCRMmhKbyCtKPmEEQxA2CIG4QBHGDXIgbkq2QUMWVNWvWhKbyCtLM88xbudLWLVliXmlpuvcGIcKxBkEQNwiCuEEuxA3DCIFstHq1FTZqZD3NrHjpUrOGDdO9RwAAADmHni0AAAAASAGSrZAoKCiwjh07unsgGcQMksGxBkEQNwiCuEEuxA3DCEMiLy/PGjVqlO7dQEhjB0gUxxoEQdwgCOIGuRA39GyFRHFxsY0aNcrdA8kgZpAMjjUIgrhBEMQNciFuSLZCJCwlLgGEG8caBEHcIAjiBtkeNyRbAAAAAJACzNkCslFBgZUefbT9tmSJNQzJBFIAAIBsQ7IVEqq40rlz59BUXkGa1aplea++arXXrLGC2rXTvTcIEY41CIK4QRDEDXIhbhhGGCJFRUXp3gWEDDGDIIgbBEHcIAjiBtkeNyRbIZoIOHr06FBNCER6ETMIgrhBEMQNgiBukAtxwzBCIButWmWF9erZriqRunSpWcOG6d4jAACAnEPPFgAAAACkAD1bgJn16xfseYMHV/WeAAAAIFvkeZ7npXsnMt3y5cutYcOGtmzZMmvQoEFa9kEfk8amqvJKXl5etScVCFmytWqVWb167kdvxQrL++NnoLqONcgtxA2CIG4Q1rhJJjdgGGGIrF+/Pt27ACAHcKxBEMQNgiBukO1xQ7IVEsrgJ06cGJrKK8gcxAySwbEGQRA3CIK4QS7EDckWAAAAAKQABTKAbFRQYKUHH+zGEtcPyRXWAQAAsg3JVohoIiCQkFq1rPTtt+2HceNs51q10r03CBmONQiCuEEQxA2yPW6oRhiSaoRVhWqEOVKNEAAAAClBNcIspJx46dKl7h5IBDGDIIgbBEHcIAjiBrkQNyRbIaGKK9OmTQtN5RVkxnW26rdqZSXLl6d7bxAiHGsQBHGDIIgb5ELcMGcLyFJ5q1ebRjQXp3tHAAAAchQ9WwAAAACQAiRbIZGXl2e1a9d290AyiBkkg2MNgiBuEARxg1yIG6oRJoBqhAhdNcI/5mw5K1ea1a2b7j0CAADIClQjzEKlpaW2YMECdw8kg5hBMjjWIAjiBkEQN8iFuCHZCgkF1MyZM0MTWMgcxAySwbEGQRA3CIK4QS7EDdUIgWyUn2/eXnvZihUrrE4+36kAAACkQ1rPwj777DPr16+fbb755m6S25tvvhnzuKaTXXvttdaqVSs3Ea5Pnz72/fffx6yzZMkSO/HEE914yUaNGtkZZ5xhKzVHJcrEiRNtzz33tFq1almbNm3szjvvrJb2AWlTu7aVDB1qUx56yP0MAACAHEu2Vq1aZV26dLGBAweW+biSov/85z82aNAg+/rrr61u3brWt29fW7t2bWQdJVqTJ0+2jz76yN555x2XwJ199tkxE9gOPPBAa9u2rY0ZM8buuusuu/766+3RRx+1MFEyqol4Yam8gvQjZhAEcYMgiBsEQdwgF+ImY6oR6g1744037IgjjnC/a7fU43XZZZfZ5Zdf7pap4keLFi3s6aeftuOPP96mTp1qnTp1slGjRln37t3dOh988IEdcsghNnfuXPf8hx9+2P75z3/a/PnzraioyK3z97//3fWi6erTiaAaIUJXjRAAAAApkUxukLFztmbNmuUSJA0d9KlRvXr1spEjR7pkS/caOugnWqL18/PzXU/YkUce6dbZa6+9IomWqHfsjjvusN9++80aN2680WuvW7fO3aLfUCkuLnY30Wvopsl50RP0/OUlJSUuYaxseUFBgUs0/e1GLxetL3oNvR9bbLFFZDvRCgsL3Xajl2u72k70Pv6+2TwrKdHrllp+/p/77nlqj/az1D3m0zI9VlCgbXsJLC8wz9Nrx7ZJr/n7PpQkuLzQ8vI8y8+PXl72vqerTZ4X+zmV9/kl+zlVtDyh2Fu50gq22cY97s2caYUNGwaOvYxpUxX+PdGm8vfdP9a0bt068nvY21TRctpUNW3S6/z666/uS87473DD2qaKltOmqmmT6HijL9KjeynC3KZs/JwyrU15eXn2888/u7jRfqWjTfGPhzLZ0h+f6I2Mpt/9x3TfvHnzjT6wzTbbLGadrbfeeqNt+I+VlWzddtttdsMNN2y0fNy4cW4oozRr1szat2/vksKFCxdG1tEJim7fffedy3Z97dq1c/s6adIkW7NmTWR5x44dXcKobUcHWefOnV2COHr0aPe7AmHp0qVu37XeE09MjKxbXFxgn3zSw5o0WWbduv3ZW7dyZW0bMaKLbbHFItthh5lu2f77my1a1NDGjt3e2rWbZ+3bz42s//PPzWzy5Pa2/fazbIst/mzTjBmt3a1Ll++sadM/2zR5cjv7+efm1qvXJKtX7882jRnT0RYvbmR77z3OCgv/bNOXX3a2tWuLbP/9f2+Tb+jQ7lar1nrbffeN27TZZmW3afPN/2yTpKtNJ5yQfJv0OZ1zzp9t0nxEDaddtGiRq64T/eXC9ttvb/PmzXM9tb5EYm/F/PnWc9Ei06Fh/qJF1rJhw8Cx59OXGuvXr3dzIKMPPj169HCxHt1TnIo2VeXfE20qv0061miIt06adYzMhjZl4+eUaW3yT1a0vob2Z0ObsvFzyrQ2aYqHnq91o7/kDnObsvFzyrQ2dejQwX744QfXJj9Jr+426f/J0A8jHDFihO2+++4uQFQgw3fssce6dV9++WW79dZb7ZlnnrHp06fHbEtvnpKlc889183XUrL1yCOPRB6fMmWK7bDDDu5eQZhIz5YKayxevDjSVVjdGbTux44d6wJVCeWRR4avFygbe7aCtun111Pfs1XYqJFbvn7JEitq3DhjvpHKxm/ZsqlN/rFG//n5+x/2NlW0nDZVTZui/4+Kn0cR1jZVtJw2VU2btI7iZuedd47sV9jblI2fU6a1yfM8N4Vol112iWyzutuk3KBJkybhHkbYsmVLd69hCdHJln7v2rVrZB1d1Cya3hxVKPSfr3s9J5r/u79OvJo1a7pbPAWDbtH8Dyte9EEjkeXx2y1rud91qptO2uMpGSh7uYIpP+HlSjjKqp3iJxCJLy/c5OXZ2qayPu/yYinZ5S7Gorbvr7MpsVfZcsVkyttUBtqUmjb5J8vZ1Kagy2lT4vvu//+UTW2qaDlt2vQ2+Se0Wl7W64axTZUtp022yW1S3PjJWLrOy8t7vCwZewEe9UYpGRo6dGhkmbJIzcXq3bu3+133GlqnKoO+Tz75xGW0mtvlr6MKhRs2bIiso8qF2223XZlDCDOVAkddpGUFEFARYgbJ4FiDIIgbBEHcIBfiJq17qethjR8/3t1E4yz185w5c1zGOmDAALv55pvt7bfftm+//dZOOeUUN4/AH2qoIYAHHXSQnXXWWfbNN9/Yl19+aRdccIErnqH15G9/+5sbY6nrb2kcuYYf3n///XbppZdamCigNBY1LIGFzEHMIBkcaxAEcYMgiBvkQtykdS81yUzjdHUTJUD6WRcyliuvvNIuvPBCd90szR9QcqbS7ro4se/55593k9n2339/V/J9jz32iLmGlibSffjhhy6R69atmyslr+1HX4srDNRbN2PGjJhxqEAiiBkkg2MNgiBuEARxg1yIm7TO2dpnn302KgEaTb1bN954o7uVR5UHX3jhhQpfRxVEPv/8cwszBZSqq6hyT1gyeaRRfr553brZqtWrTV9NEDFIFMcaBEHcIAjiBrkQNxlbIAPAJqhd20q++somjR5t3WvXTvfeAAAA5KTMTwcBAAAAIIRItkJC3aS6KFsYukuRGYgZBEHcIAjiBkEQN8iFuGEYYcgCC0jI6tWW36mTuYiZMsWsTp107xFCgmMNgiBuEARxg1yIm3CkhHBXrJ46depGV90GyqTCMz/+6G4lcVdBByrCsQZBEDcIgrhBLsQNyVZIqGrjsmXLKqzeCJSFmEEyONYgCOIGQRA3yIW4IdkCAAAAgBQg2QIAAACAFCDZCtFkwHbt2oWm8goyBzGDZHCsQRDEDYIgbpALcUM1wpBQQDVv3jzdu4EQCsvBCJmBYw2CIG4QBHGDXIgbkq2QUMWVSZMm2Y477mgFBQXp3h1son79gj1v8OAEV8zLM69TJ1u3dq3VKC01IgaJ4liDIIgbBEHcIBfihmQrJFRxZc2aNaGpvII0q1PHSiZMsPGjR1v32rXTvTcIEY41CIK4QRDEDXIhbhhfBAAAAAApQLIFAAAAACnAMMKQ0JjUjh07hmJsKjLA6tVW0KOH9SgttfzRo80K+VNHYjjWIAjiBkEQN8iFuOEMLCTy8vKsUaNG6d4NhIXnWd6UKRTGQNI41iAI4gZBEDfIhbhhGGFIFBcX26hRo9w9kAxiBsngWIMgiBsEQdwgF+KGZCtkpS4BINU41iAI4gZBEDfI9rhhGCGQhdfnqlls9tofP594otnqvCSu0QUAAIAqQc8WAAAAAKQAyVZIqOJK586dQ1N5BZmjpISYQeI41iAI4gZBEDfIhbhhGGGIFBUVpXsXEBZ5efZr7baW98fPQDI41iAI4gZBEDfI9rihZytEEwFHjx4dqgmBSJ91BXXs/w78wV6+4yUrLqqZ7t1BiHCsQRDEDYIgbpALcUOyBQAAAAApQLIFAAAAACnAnC0gCxWVrLHbv9jTGoxbbZ93/trWWP107xIAAEDOIdkKCVVc6d69e2gqryC98rxS67B0jNlSs9JOefylI2EcaxAEcYMgiBvkQtwwjDBE1q9fn+5dAJADONYgCOIGQRA3yPa44fvukFDFlYkTJ7pMvrCQjw2JKyj4vVpPv37Bnj94cNXuDzIbxxoEQdwgCOIGuRA39GwBAAAAQAqQbAEAAABACpBshUhYJgICCDeONQiCuEEQxA2yPW4yf6AjHI1J7dGjR7p3AyGyrKipuy8pKeQvHQnjWIMgiBsEQdwgF+KGnq2Q8DzPli5d6u6ByqwrrGsn911gF5/wva2vUSfdu4MQ4ViDIIgbBEHcIBfihu+7Q1R5Zdq0aaGpvIL0y88vsW7dptnQod1/790KiCqGuYVjDYIgbhAEcYNciBt6tgAAAAAgBTI/HQSQtKKSNXbDyIOs0eQV9nnHT22N1U/3LgEAAOQckq2QyMvLs9q1a7t7oDJ5XqntuPgzs8Vmedt5ZoQNEsSxBkEQNwiCuEEuxE2eF5bZZWm0fPlya9iwoS1btswaNGhgmSDoPBrkhprFq+y1D+q5n485aKUrmBEWzPUCAADZkhswZyskSktLbcGCBe4eSEZeHjGDxHGsQRDEDYIgbpALcUOyFRIKqJkzZ4YmsJA58vOJGSSOYw2CIG4QBHGDXIgbki0AAAAASAEKZADIKFzXCwAAZAuSrZBQxRVNxAtL5RWk39qCOpafr/o3xAwSx7EGQRA3CIK4QS7EDdUIE0A1QiB70SMGAACSQTXCLKRJgHPnzg3NZEBkRhXC9u3nUo0QSeFYgyCIGwRB3CAX4oZhhCELrJYtW1p+PjkyEqtCqGRr9uyWVlJCzJSHOWKxONYgCOIGQRA3yIW4IdkCslCNkrX2j1FHWdPvl9ln7YZYif1+gWNUHZI0AABQGZItIAvleyXW/df3zX41y9+6hBoZOSzZpLCgwGz//c26d0/VHgEAkDsyv+8NjrpJmzVrForuUmQWzyNmkFy8/Pwzxxokh/+jEARxg1yIG6oRJoBqhAibmsWr7LUPfh86eMxBK21dYd107xJyCEMlAQDZbDnVCMs2cOBA22qrraxWrVrWq1cv++abbyxMkwFnzJgRmsoryKxCGUAy8bLDDjOIGySF/6MQBHGDXIibnEm2Xn75Zbv00kvtuuuus7Fjx1qXLl2sb9++tmDBAgsDBdTChQtDE1jIHJR+R7LxssUWC4kbJIX/oxAEcYNciJucSbbuueceO+uss+y0006zTp062aBBg6xOnTr25JNPpnvXAAAAAGShnKhGuH79ehszZoxdffXVkWWaVNenTx8bOXLkRuuvW7fO3XwajylLliyx4uLiyPN1U1YdnVn7y0tKSix6Olx5ywsKCiwvLy+y3ejlovX9+5UrV7p9KSwstNLS35f7SkoKLS/Ps/z86OV5VlKi7ZfGDQkqe7kmxpeWaj9LY77V1jI9VlCgbXsJLC8wz8uzgoLYNuk1f29bSYLLaVPQNpWWrrTlfywvLl5qGywv9G3Kxs8pE9uUl1dia9astA0blkf2P9k2HXposDa98ELsca+846FPx0IdT6OX63iq9eOPzeUtr+5jeba2Kfr/KD0nG9pU0XLaVDVt0jqrVq2y3377LbJfYW9TNn5OmdYmz/Pc8SY6bqq7TZqzJYmUvsiJZGvRokXuzWnRokXMcv0+bdq0jda/7bbb7IYbbtho+dZbb53S/QSq0hv+D0O2Su+OIHTSVeCiUaP0vC4AAEGsWLHCFcqwXE+2kqUeMM3v8ilDVq9WkyZNNvrGrroog27Tpo399NNPGVMREZmNmEEQxA2CIG4QBHGDsMaNerSUaG2++eaVrpsTyVbTpk1d99+vv/4as1y/t2zZcqP1a9as6W7RGmXIV64KKg5ISAYxgyCIGwRB3CAI4gZhjJvKerRyqkBGUVGRdevWzYYOHRrTW6Xfe/fundZ9AwAAAJCdcqJnSzQssH///ta9e3fr2bOn3XfffW5SpqoTAgAAAEBVy5lk67jjjnM1+a+99lqbP3++de3a1T744IONimZkKg1r1DXC4oc3AuUhZhAEcYMgiBsEQdwgF+Imz0ukZiEAAAAAICk5MWcLAAAAAKobyRYAAAAApADJFgAAAACkAMkWAAAAAKQAyVYIDBw40LbaaiurVauW9erVy7755pt07xLS5Prrr7e8vLyYW8eOHSOPr1271s4//3xr0qSJ1atXz44++uiNLuY9Z84cO/TQQ61OnTrWvHlzu+KKK6y4uDgNrUGqfPbZZ9avXz93ZXvFyJtvvhnzuOoiqTJrq1atrHbt2tanTx/7/vvvY9ZZsmSJnXjiie6Ckbqo+xlnnGErV66MWWfixIm25557umNTmzZt7M4776yW9iE9cXPqqadudPw56KCDYtYhbnLPbbfdZj169LD69eu7/1OOOOIImz59esw6VfV/0/Dhw22XXXZxVei22WYbe/rpp6uljaj+mNlnn302Ot6cc845oYwZkq0M9/LLL7trhKnE5dixY61Lly7Wt29fW7BgQbp3DWmyww472C+//BK5ffHFF5HHLrnkEhs8eLC9+uqr9umnn9q8efPsqKOOijxeUlLiDkzr16+3ESNG2DPPPOMOPDrxRvbQNQR1rNAXNWXRye1//vMfGzRokH399ddWt25dd1zRCZFPJ8yTJ0+2jz76yN555x13In722WdHHl++fLkdeOCB1rZtWxszZozddddd7suARx99tFraiOqPG1FyFX38efHFF2MeJ25yj/6vUSL11Vdfuc99w4YN7jNWPFXl/02zZs1y6+y77742fvx4GzBggJ155pk2ZMiQam8zUh8zctZZZ8Ucb6K/mAlVzKj0OzJXz549vfPPPz/ye0lJibf55pt7t912W1r3C+lx3XXXeV26dCnzsaVLl3o1atTwXn311ciyqVOn6tIO3siRI93v7733npefn+/Nnz8/ss7DDz/sNWjQwFu3bl01tADVTZ//G2+8Efm9tLTUa9mypXfXXXfFxE7NmjW9F1980f0+ZcoU97xRo0ZF1nn//fe9vLw87+eff3a/P/TQQ17jxo1j4uaqq67ytttuu2pqGaozbqR///7e4YcfXu5ziBvIggULXBx8+umnVfp/05VXXuntsMMOMa913HHHeX379q2mlqG6Ykb23ntv7+KLL/bKE6aYoWcrgylb1zd/GuLjy8/Pd7+PHDkyrfuG9NFwLw3zadeunfsWWd3ooljRt0PR8aIhhltuuWUkXnS/0047xVzMWz0a+rZZ30Yj++mbPl3YPTpOGjZs6IYoR8eJhoB17949so7W1/FHPWH+OnvttZcVFRXFxJKGgvz222/V2iZUHw3J0XCd7bbbzs4991xbvHhx5DHiBrJs2TJ3v9lmm1Xp/01aJ3ob/jqcD2VfzPief/55a9q0qe2444529dVX2+rVqyOPhSlmCqv11ZCURYsWuW7S6EAS/T5t2rS07RfSRyfE6ibXiY661G+44QY392HSpEnuBFonMDrZiY8XPSa6Lyue/MeQ/fzPuaw4iI4TnVBHKywsdP8RRq+z9dZbb7QN/7HGjRuntB2ofhpCqKFf+txnzJhh//jHP+zggw92Jy4FBQXEDay0tNQN1dp9993dCbJU1f9N5a2jk+s1a9a4+afIjpiRv/3tb264sb5c1jzPq666yn0p8/rrr4cuZki2gBDRiY2vc+fOLvnSweiVV17hPxoAKXX88cdHftY3yjoGtW/f3vV27b///mndN2QGzcPRl3/Rc4mBIDETPddTxxsVdNJxRl/06LgTJgwjzGDqOtW3hfEVe/R7y5Yt07ZfyBz6pnDbbbe1H374wcWEhp4uXbq03HjRfVnx5D+G7Od/zhUdV3QfX4RHFZ5UaY5Ygk9DmfX/lI4/QtzktgsuuMAVRRk2bJi1bt06sryq/m8qbx1VvuTLxuyKmbLoy2WJPt6EJWZItjKYut27detmQ4cOjelu1e+9e/dO674hM6iksr7l0Tc+ipUaNWrExIu63DWny48X3X/77bcxJ0SqBKQDT6dOndLSBlQvDeHSf0DRcaIhFZpTEx0nOjHSXAvfJ5984o4//n94WkeV5jQXIzqWNMSVoWC5Ye7cuW7Olo4/QtzkJtVT0UnzG2+84T7v+GGiVfV/k9aJ3oa/DudD2RczZVE1QYk+3oQmZqq1HAeS9tJLL7kqYU8//bSr9HT22Wd7jRo1iqm+gtxx2WWXecOHD/dmzZrlffnll16fPn28pk2buko+cs4553hbbrml98knn3ijR4/2evfu7W6+4uJib8cdd/QOPPBAb/z48d4HH3zgNWvWzLv66qvT2CpUtRUrVnjjxo1zNx3m77nnHvfzjz/+6B6//fbb3XHkrbfe8iZOnOgqzG299dbemjVrIts46KCDvJ133tn7+uuvvS+++MLr0KGDd8IJJ0QeV4WxFi1aeCeffLI3adIkd6yqU6eO98gjj6SlzUht3Oixyy+/3FWP0/Hn448/9nbZZRcXF2vXro1sg7jJPeeee67XsGFD93/TL7/8ErmtXr06sk5V/N80c+ZMFytXXHGFq2Y4cOBAr6CgwK2L7IqZH374wbvxxhtdrOh4o/+r2rVr5+21116hjBmSrRB44IEH3EGqqKjIlYL/6quv0r1LSBOVLG3VqpWLhS222ML9roOSTyfL5513niutrAPMkUce6Q5g0WbPnu0dfPDBXu3atV2ipgRuw4YNaWgNUmXYsGHuZDn+ptLdfvn3f/3rX+6kV1/m7L///t706dNjtrF48WJ3klyvXj1XSve0005zJ9zRJkyY4O2xxx5uG4pHJXHIzrjRSZBOanQyozLebdu29c4666yNvvgjbnJPWTGj21NPPVXl/zcpRrt27er+D9TJd/RrIHtiZs6cOS6x2myzzdxxYptttnEJ07Jly0IZM3n6p3r70gAAAAAg+zFnCwAAAABSgGQLAAAAAFKAZAsAAAAAUoBkCwAAAABSgGQLAAAAAFKAZAsAAAAAUoBkCwAAAABSgGQLAAAAAFKAZAsAkPPy8vLszTfftGw0e/Zs177x48ene1cAIOeQbAEAUm7hwoV27rnn2pZbbmk1a9a0li1bWt++fe3LL7+0bJApCc2pp55qRxxxRFr3AQDwp8KonwEASImjjz7a1q9fb88884y1a9fOfv31Vxs6dKgtXrw43bsGAEDK0LMFAEippUuX2ueff2533HGH7bvvvta2bVvr2bOnXX311faXv/wlst4999xjO+20k9WtW9fatGlj5513nq1cuTLy+NNPP22NGjWyd955x7bbbjurU6eOHXPMMbZ69WqXxG211VbWuHFju+iii6ykpCTyPC2/6aab7IQTTnDb3mKLLWzgwIEV7vNPP/1kxx57rHu9zTbbzA4//HDXexVUaWmp3Xbbbbb11ltb7dq1rUuXLvbaa69FHh8+fLjrGVMC2r17d9e23XbbzaZPnx6znZtvvtmaN29u9evXtzPPPNP+/ve/W9euXd1j119/vXsf3nrrLbct3bRd38yZM937r23r9UeOHBm4PQCAxJBsAQBSql69eu6mOVHr1q0rd738/Hz7z3/+Y5MnT3ZJwyeffGJXXnllzDpKrLTOSy+9ZB988IFLJo488kh777333O2///2vPfLIIzGJjNx1110uwRg3bpxLUC6++GL76KOPytyPDRs2uCGOSmiUJGqoo/b/oIMOcr1zQSjRevbZZ23QoEGufZdccomddNJJ9umnn8as989//tPuvvtuGz16tBUWFtrpp58eeez555+3W265xSWtY8aMcUMyH3744cjjl19+uUsQtZ+//PKLuylhi9621tFQx2233dYln8XFxYHaAwBIkAcAQIq99tprXuPGjb1atWp5u+22m3f11Vd7EyZMqPA5r776qtekSZPI70899ZSn/7Z++OGHyLL/+7//8+rUqeOtWLEisqxv375uua9t27beQQcdFLPt4447zjv44IMjv2u7b7zxhvv5v//9r7fddtt5paWlkcfXrVvn1a5d2xsyZEiZ+zpr1iy3jXHjxm302Nq1a90+jhgxImb5GWec4Z1wwgnu52HDhrnnf/zxx5HH3333XbdszZo17vdevXp5559/fsw2dt99d69Lly6R3/v37+8dfvjhZe7b448/Hlk2efJkt2zq1KlltgcAUDXo2QIAVMucrXnz5tnbb7/tel7UI7XLLru4oYG+jz/+2Pbff383zE+9SieffLKb06XeLJ+GwLVv3z7ye4sWLdwwQfU8RS9bsGBBzOv37t17o9+nTp1a5r5OmDDBfvjhB7cPfq+chhKuXbvWZsyYkXTbtS214YADDohsTzf1dMVvr3PnzpGfW7Vq5e79tmhIoYZfRov/vSIVbRsAkBoUyAAAVItatWq5hEO3f/3rX27O0XXXXecq6Gk+1GGHHeYqFmqonJKbL774ws444ww3dE9JltSoUSNmm5qXVNYyzZEKSvPEunXr5obtxWvWrFmg7cm7777rEsloqswYLbotaodsSluqa9sAgLKRbAEA0qJTp06Ra1tpDpJO/DVfSXO35JVXXqmy1/rqq682+n377bcvc131uL388suuEEWDBg2qpJ1KqubMmWN777134O2oKMioUaPslFNOiSzT79GKiopiioMAANKLZAsAkFIaCvjXv/7VFXvQUDYNz1MBiDvvvNNV+ZNtttnGFaZ44IEHrF+/fq4ohYpJVBVtT6+na1CpMMarr77qeprKcuKJJ7qCGtq3G2+80Vq3bm0//vijvf76665gh34vT3z1QNlhhx1cYQoVxVBCuccee9iyZcvcPimZ69+/f0JtuPDCC+2ss85y1QpV+EIJ4cSJE10pfZ+GVA4ZMsTtR5MmTaxhw4YJbRsAkBokWwCAlNL8pF69etm9997r5igpqVJpdyUO//jHP9w6qhSo0u+qtKeS8HvttZer4Bfdi7MpLrvsMpfg3XDDDS7B0Wup4mBZNGTxs88+s6uuusqOOuooW7FihRv+p/lklfV0HX/88WWWkVfpeQ1BVJtUgl0l5dWD5rc/EUoC9Vwlbpo/psqDGoL5zTffRNbRe6r5cErINHxx2LBhLgEDAKRHnqpkpOm1AQBIOSUbAwYMcLdso/lvLVu2dCXvAQCZh54tAABCQBUNNbRSPXIFBQX24osvugqO5V0vDACQfiRbAACEgCoI6sLNqtaoYYQqmPG///3P+vTpk+5dAwCUg2GEAAAAAJACXNQYAAAAAFKAZAsAAAAAUoBkCwAAAABSgGQLAAAAAFKAZAsAAAAAUoBkCwAAAABSgGQLAAAAAFKAZAsAAAAArOr9P/jHOhyMiUyGAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# 计算每个样本的长度\n",
    "train_lengths = [len(x) for x in x_train]\n",
    "\n",
    "# 绘制直方图\n",
    "plt.figure(figsize=(10, 6))\n",
    "plt.hist(train_lengths, bins=50, alpha=0.7, color='blue')\n",
    "plt.xlabel('Sample Length')\n",
    "plt.ylabel('Sample Count')\n",
    "plt.title('Training Set Sample Length Distribution')\n",
    "plt.grid(True, linestyle='--', alpha=0.7)\n",
    "\n",
    "# 计算一些统计信息\n",
    "max_length = max(train_lengths)\n",
    "min_length = min(train_lengths)\n",
    "avg_length = 500 #自定义了一个长度\n",
    "\n",
    "# 在图上显示统计信息\n",
    "plt.axvline(x=avg_length, color='r', linestyle='--', label=f'Average Length: {avg_length:.1f}')\n",
    "plt.text(max_length*0.7, plt.ylim()[1]*0.9, f'Max Length: {max_length}')\n",
    "plt.text(max_length*0.7, plt.ylim()[1]*0.85, f'Min Length: {min_length}')\n",
    "plt.text(max_length*0.7, plt.ylim()[1]*0.8, f'Average Length: {avg_length:.1f}')\n",
    "plt.legend()\n",
    "\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "72202119",
   "metadata": {},
   "source": [
    "# Tokenizer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "1f1980b6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:48.087537Z",
     "start_time": "2025-07-04T09:27:48.081569Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "编码后的序列:\n",
      "[[    1  4825   182     3     0     0     0]\n",
      " [    1     2  3004     2    19 19233     3]\n",
      " [    1    14     9     6  2181     3     0]]\n",
      "\n",
      "解码后的文本:\n",
      "['[BOS] hello world [EOS]', '[BOS] [UNK] text [UNK] with batch [EOS]', '[BOS] this is a test [EOS]']\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "\n",
    "class Tokenizer:\n",
    "    def __init__(self, word_index, reverse_word_index):\n",
    "        self.word_index = word_index\n",
    "        self.reverse_word_index = reverse_word_index\n",
    "        self.pad_token = 0  # <PAD>\n",
    "        self.start_token = 1  # <START>\n",
    "        self.unk_token = 2  # <UNK>\n",
    "        self.end_token = 3  # <END>\n",
    "    \n",
    "    def encode(self, texts, maxlen=None, padding='post', truncating='post', add_start=False, add_end=False):\n",
    "        \"\"\"\n",
    "        将文本序列转换为数字序列\n",
    "        \n",
    "        参数:\n",
    "        - texts: 文本列表，每个元素是一个词列表\n",
    "        - maxlen: 序列最大长度，如果为None则使用最长序列的长度\n",
    "        - padding: 'pre'或'post'，表示在序列前或后填充\n",
    "        - truncating: 'pre'或'post'，表示从序列前或后截断\n",
    "        - add_start: 是否添加开始标记\n",
    "        - add_end: 是否添加结束标记\n",
    "        \n",
    "        返回:\n",
    "        - 编码后的序列\n",
    "        \"\"\"\n",
    "        result = [] #编码后的序列，存储整个batch的序列\n",
    "        \n",
    "        # 计算需要的序列长度\n",
    "        batch_max_len = max([len(seq) for seq in texts]) #batch内最长序列长度\n",
    "        if add_start:\n",
    "            batch_max_len += 1\n",
    "        if add_end:\n",
    "            batch_max_len += 1\n",
    "            \n",
    "        # 如果maxlen为None或者batch内最大长度小于maxlen，使用batch内最大长度\n",
    "        if maxlen is None or batch_max_len < maxlen:\n",
    "            maxlen = batch_max_len\n",
    "        \n",
    "        for text in texts:\n",
    "            sequence = []\n",
    "            \n",
    "            # 添加开始标记\n",
    "            if add_start:\n",
    "                sequence.append(self.start_token)\n",
    "            \n",
    "            # 将词转换为索引\n",
    "            for word in text:\n",
    "                sequence.append(self.word_index.get(word, self.unk_token))  \n",
    "            \n",
    "            # 添加结束标记\n",
    "            if add_end:\n",
    "                sequence.append(self.end_token)\n",
    "            \n",
    "            # 截断序列\n",
    "            if len(sequence) > maxlen:\n",
    "                if truncating == 'pre':\n",
    "                    sequence = sequence[-maxlen:]\n",
    "                else:  # truncating == 'post'\n",
    "                    sequence = sequence[:maxlen]\n",
    "            \n",
    "            # 填充序列\n",
    "            pad_length = maxlen - len(sequence)\n",
    "            if pad_length > 0:\n",
    "                if padding == 'pre':\n",
    "                    sequence = [self.pad_token] * pad_length + sequence\n",
    "                else:  # padding == 'post'\n",
    "                    sequence = sequence + [self.pad_token] * pad_length\n",
    "            \n",
    "            result.append(sequence)\n",
    "        \n",
    "        return np.array(result)\n",
    "    \n",
    "    def decode(self, sequences):\n",
    "        \"\"\"\n",
    "        将数字序列转换回文本\n",
    "        \n",
    "        参数:\n",
    "        - sequences: 数字序列列表\n",
    "        \n",
    "        返回:\n",
    "        - 解码后的文本列表\n",
    "        \"\"\"\n",
    "        result = []\n",
    "        for sequence in sequences:\n",
    "            words = []\n",
    "            for idx in sequence:\n",
    "                if idx == self.pad_token:\n",
    "                    continue  # 跳过填充标记\n",
    "                word = self.reverse_word_index.get(idx, '?')\n",
    "                # if word not in ['[PAD]', '[BOS]', '[UNK]', '[EOS]']:\n",
    "                words.append(word)\n",
    "            result.append(' '.join(words))\n",
    "        return result\n",
    "\n",
    "# 创建Tokenizer实例\n",
    "tokenizer = Tokenizer(word_index, reverse_word_index)\n",
    "\n",
    "# 测试编码\n",
    "encoded = tokenizer.encode(raw_text, maxlen=500, padding='post', add_start=True, add_end=True)\n",
    "print(\"编码后的序列:\")\n",
    "print(encoded)\n",
    "\n",
    "# 测试解码\n",
    "decoded = tokenizer.decode(encoded)\n",
    "print(\"\\n解码后的文本:\")\n",
    "print(decoded)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "1f2cddf5",
   "metadata": {},
   "source": [
    "# Dataset和DataLoader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "c207da73",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:50.018224Z",
     "start_time": "2025-07-04T09:27:48.087537Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "训练集大小: 25000\n",
      "验证集大小: 10000\n",
      "测试集大小: 15000\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([\"[BOS] this film was just brilliant casting location scenery story direction everyone's really suited the part they played and you could just imagine being there robert [UNK] is an amazing actor and now the same being director [UNK] father came from the same scottish island as myself so i loved the fact there was a real connection with this film the witty remarks throughout the film were great it was just brilliant so much that i bought the film as soon as it was released for [UNK] and would recommend it to everyone to watch and the fly fishing was amazing really cried at the end it was so sad and you know what they say if you cry at a film it must have been good and this definitely was also [UNK] to the two little boy's that played the [UNK] of norman and paul they were just brilliant children are often left out of the [UNK] list i think because the stars that play them all grown up are such a big profile for the whole film but these children are amazing and should be praised for what they have done don't you think the whole story was so lovely because it was true and was someone's life after all that was shared with us all\",\n",
       "  \"[BOS] big hair big boobs bad music and a giant safety pin these are the words to best describe this terrible movie i love cheesy horror movies and i've seen hundreds but this had got to be on of the worst ever made the plot is paper thin and ridiculous the acting is an abomination the script is completely laughable the best is the end showdown with the cop and how he worked out who the killer is it's just so damn terribly written the clothes are sickening and funny in equal [UNK] the hair is big lots of boobs [UNK] men wear those cut [UNK] shirts that show off their [UNK] sickening that men actually wore them and the music is just [UNK] trash that plays over and over again in almost every scene there is trashy music boobs and [UNK] taking away bodies and the gym still doesn't close for [UNK] all joking aside this is a truly bad film whose only charm is to look back on the disaster that was the 80's and have a good old laugh at how bad everything was back then\",\n",
       "  \"[BOS] this has to be one of the worst films of the 1990s when my friends i were watching this film being the target audience it was aimed at we just sat watched the first half an hour with our jaws touching the floor at how bad it really was the rest of the time everyone else in the theatre just started talking to each other leaving or generally crying into their popcorn that they actually paid money they had [UNK] working to watch this feeble excuse for a film it must have looked like a great idea on paper but on film it looks like no one in the film has a clue what is going on crap acting crap costumes i can't get across how [UNK] this is to watch save yourself an hour a bit of your life\"],\n",
       " array([1, 0, 0], dtype=int64))"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "from torch.utils.data import Dataset, DataLoader, random_split\n",
    "\n",
    "class TextDataset(Dataset):\n",
    "    \"\"\"\n",
    "    文本数据集类\n",
    "    \"\"\"\n",
    "    def __init__(self, sequences, tokenizer, labels=None):\n",
    "        \"\"\"\n",
    "        初始化文本数据集\n",
    "        \n",
    "        参数:\n",
    "        - sequences: 编码后的序列\n",
    "        - tokenizer: 分词器实例\n",
    "        - labels: 标签（可选）\n",
    "        \"\"\"\n",
    "        # 将编码序列解码为文本\n",
    "        self.texts = tokenizer.decode(sequences)\n",
    "        self.tokenizer = tokenizer\n",
    "        self.labels = labels\n",
    "    \n",
    "    def __len__(self):\n",
    "        \"\"\"\n",
    "        返回数据集大小\n",
    "        \"\"\"\n",
    "        return len(self.texts)\n",
    "    \n",
    "    def __getitem__(self, idx):\n",
    "        \"\"\"\n",
    "        获取指定索引的样本\n",
    "        \n",
    "        参数:\n",
    "        - idx: 索引\n",
    "        \n",
    "        返回:\n",
    "        - 样本（文本和标签，如果有的话）\n",
    "        \"\"\"\n",
    "        if self.labels is not None:\n",
    "            return self.texts[idx], self.labels[idx]\n",
    "        return self.texts[idx]\n",
    "\n",
    "def collate_fn(batch, tokenizer, maxlen=500):\n",
    "    \"\"\"\n",
    "    自定义批处理函数，用于在加载数据时进行编码\n",
    "    \n",
    "    参数:\n",
    "    - batch: 批次数据\n",
    "    - tokenizer: 分词器实例\n",
    "    - maxlen: 最大序列长度\n",
    "    \n",
    "    返回:\n",
    "    - 编码后的序列和标签（如果有的话）\n",
    "    \"\"\"\n",
    "    if isinstance(batch[0], tuple):\n",
    "        # print(batch)\n",
    "        # 如果批次包含标签\n",
    "        text_list = [item[0].split() for item in batch]  #batch是128样本，每个样本类型是元组，第一个元素是文本，第二个元素是标签\n",
    "        label_list = [item[1] for item in batch]\n",
    "        # print(text_list)\n",
    "        encoded = tokenizer.encode(text_list, maxlen=maxlen, padding='pre', add_start=False, add_end=True)\n",
    "        sequences = torch.tensor(encoded, dtype=torch.long)\n",
    "        labels = torch.tensor(label_list, dtype=torch.float).view(-1, 1)  # 将标签reshape为二维 [batch_size, 1]\n",
    "        return sequences, labels\n",
    "    else:\n",
    "        # 如果批次只有文本\n",
    "        text_list = [item.split() for item in batch]\n",
    "        encoded = tokenizer.encode(text_list, maxlen=maxlen, padding='pre', add_start=False, add_end=True)\n",
    "        sequences = torch.tensor(encoded, dtype=torch.long)\n",
    "        return sequences\n",
    "\n",
    "# 示例：创建数据集和数据加载器\n",
    "# 假设我们有训练、验证和测试数据\n",
    "# 创建对应的数据集\n",
    "train_dataset = TextDataset(x_train, tokenizer, y_train)\n",
    "val_dataset = TextDataset(x_val, tokenizer, y_val)\n",
    "test_dataset = TextDataset(x_test, tokenizer, y_test)\n",
    "\n",
    "# 创建数据加载器\n",
    "batch_size = 128\n",
    "train_dataloader = DataLoader(\n",
    "    train_dataset, \n",
    "    batch_size=batch_size, \n",
    "    shuffle=True,\n",
    "    collate_fn=lambda batch: collate_fn(batch, tokenizer)\n",
    ")\n",
    "val_dataloader = DataLoader(\n",
    "    val_dataset, \n",
    "    batch_size=batch_size, \n",
    "    shuffle=False,\n",
    "    collate_fn=lambda batch: collate_fn(batch, tokenizer)\n",
    ")\n",
    "test_dataloader = DataLoader(\n",
    "    test_dataset, \n",
    "    batch_size=batch_size, \n",
    "    shuffle=False,\n",
    "    collate_fn=lambda batch: collate_fn(batch, tokenizer)\n",
    ")\n",
    "\n",
    "# 打印数据集和数据加载器信息\n",
    "print(f\"训练集大小: {len(train_dataset)}\")\n",
    "print(f\"验证集大小: {len(val_dataset)}\")\n",
    "print(f\"测试集大小: {len(test_dataset)}\")\n",
    "\n",
    "train_dataset[0:3]\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "c581e1ec",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:50.034502Z",
     "start_time": "2025-07-04T09:27:50.018224Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "训练数据加载器示例:\n",
      "批次 1:\n",
      "序列形状: torch.Size([128, 500])\n",
      "标签形状: torch.Size([128, 1])\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "tensor([[   0,    0,    0,  ...,   12,   18,    3],\n",
       "        [   0,    0,    0,  ...,   44, 9501,    3],\n",
       "        [   0,    0,    0,  ...,    4,  130,    3],\n",
       "        ...,\n",
       "        [   0,    0,    0,  ..., 1072,    2,    3],\n",
       "        [   1,   51,    6,  ...,    8,   30, 1477],\n",
       "        [   0,    0,    0,  ...,  118, 1099,    3]])"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 示例：遍历训练数据加载器\n",
    "print(\"\\n训练数据加载器示例:\")\n",
    "for i, (batch_sequences, batch_labels) in enumerate(train_dataloader):\n",
    "    print(f\"批次 {i+1}:\")\n",
    "    print(f\"序列形状: {batch_sequences.shape}\")\n",
    "    print(f\"标签形状: {batch_labels.shape}\")\n",
    "    if i == 0:  # 只打印第一个批次\n",
    "        break\n",
    "batch_sequences"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3fc9a057",
   "metadata": {},
   "source": [
    "# 搭建模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "d445876c",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:50.038185Z",
     "start_time": "2025-07-04T09:27:50.034502Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([1, 64, 1])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from torch import nn\n",
    "m = nn.AdaptiveAvgPool1d(1)  #输出形状为[batch_size, embedding_dim, 1],把最后一个维度size变成1\n",
    "input = torch.randn(1, 64, 8) \n",
    "output = m(input)\n",
    "output.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "id": "9693b445",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:50.044500Z",
     "start_time": "2025-07-04T09:27:50.038185Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型结构:\n",
      "SentimentClassifier(\n",
      "  (embedding): Embedding(10000, 16)\n",
      "  (lstm): LSTM(16, 128, batch_first=True)\n",
      "  (fc1): Linear(in_features=128, out_features=128, bias=True)\n",
      "  (fc): Linear(in_features=128, out_features=1, bias=True)\n",
      "  (dropout): Dropout(p=0.3, inplace=False)\n",
      ")\n",
      "单层单向lstm模型参数数量: 251,393\n"
     ]
    }
   ],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.nn.functional as F\n",
    "\n",
    "class SentimentClassifier(nn.Module):\n",
    "    def __init__(self, vocab_size, embedding_dim=16, hidden_dim=128, output_dim=1, \n",
    "                 lstm_layers=1, bidirectional=False, dropout_rate=0.3):\n",
    "        super().__init__()\n",
    "        \n",
    "        # 嵌入层\n",
    "        self.embedding = nn.Embedding(vocab_size, embedding_dim)\n",
    "        \n",
    "        # 设置lstm层\n",
    "        self.lstm = nn.LSTM(embedding_dim, hidden_dim, \n",
    "                         num_layers=lstm_layers, # 层数\n",
    "                         bidirectional=bidirectional, # 是否双向\n",
    "                         batch_first=True,\n",
    "                         dropout=dropout_rate if lstm_layers > 1 else 0)\n",
    "        \n",
    "        # 确定输出维度\n",
    "        fc_input_dim = hidden_dim * 2 if bidirectional else hidden_dim\n",
    "        \n",
    "        # 增加一个fc层，输入是fc_input_dim，输出是hidden_dim\n",
    "        self.fc1 = nn.Linear(fc_input_dim, hidden_dim)\n",
    "        \n",
    "        # 全连接层\n",
    "        self.fc = nn.Linear(hidden_dim, output_dim)\n",
    "        \n",
    "        # Dropout层，防止过拟合\n",
    "        self.dropout = nn.Dropout(dropout_rate)\n",
    "        \n",
    "    def forward(self, x):\n",
    "        # x形状: [batch_size, seq_len]\n",
    "        \n",
    "        # 通过嵌入层\n",
    "        embedded = self.embedding(x)  # [batch_size, seq_len, embedding_dim]\n",
    "        \n",
    "        # 通过lstm层\n",
    "        outputs, hidden = self.lstm(embedded)\n",
    "        \n",
    "        # print(f'outputs.shape: {outputs.shape}')\n",
    "        # print(f'hidden.shape: {hidden.shape}')\n",
    "        \n",
    "        # 取最后一个时间步的输出 (这也是为什么要设置padding_first=True的原因)\n",
    "        x = outputs[:, -1, :]\n",
    "        # print(f'hidden: {hidden}') #第一个张量是h, 第二个张量是c\n",
    "        # print(f'len(hidden): {len(hidden)}')\n",
    "        # #输出h，c的形状\n",
    "        # print(f'h是 hidden[0].shape: {hidden[0].shape}')\n",
    "        # print(f'c是 hidden[1].shape: {hidden[1].shape}')\n",
    "        # # # 打印一下形状，观察数据\n",
    "        # print(f'x.shape: {x.shape}')\n",
    "\n",
    "        # hidden_reshaped = hidden[0].squeeze(0) \n",
    "     \n",
    "        # # # 判断两个张量是否相等\n",
    "        # is_equal = torch.allclose(x, hidden_reshaped)\n",
    "        # print(f'是否相等: {is_equal}')\n",
    "        \n",
    "        # 应用dropout\n",
    "        x = self.dropout(x)\n",
    "        x = self.fc1(x)\n",
    "        x = self.fc(x)\n",
    "        \n",
    "        return x\n",
    "\n",
    "# 初始化模型\n",
    "model = SentimentClassifier(vocab_size, lstm_layers=1, bidirectional=False)\n",
    "print(f\"模型结构:\\n{model}\")\n",
    "\n",
    "# 打印模型参数数量\n",
    "def count_parameters(model):\n",
    "    return sum(p.numel() for p in model.parameters() if p.requires_grad)\n",
    "\n",
    "print(f\"单层单向lstm模型参数数量: {count_parameters(model):,}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "id": "19962cc7",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:50.161541Z",
     "start_time": "2025-07-04T09:27:50.056152Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "使用设备: cpu\n",
      "输入形状: torch.Size([128, 500])\n",
      "hidden: (tensor([[[ 0.1271, -0.0867, -0.1373,  ..., -0.1452,  0.0261,  0.0673],\n",
      "         [ 0.1237, -0.0433, -0.1340,  ..., -0.0840, -0.0063,  0.0242],\n",
      "         [ 0.0742, -0.0602, -0.0992,  ..., -0.1026,  0.0228,  0.0449],\n",
      "         ...,\n",
      "         [ 0.1433, -0.0525, -0.1030,  ..., -0.0512, -0.0146,  0.0166],\n",
      "         [ 0.0905, -0.0197, -0.1085,  ..., -0.0620, -0.0034,  0.0003],\n",
      "         [ 0.0952,  0.0330, -0.0700,  ..., -0.0295,  0.0239, -0.0408]]]), tensor([[[ 0.2346, -0.1666, -0.3062,  ..., -0.2880,  0.0604,  0.1355],\n",
      "         [ 0.2352, -0.0864, -0.2943,  ..., -0.1654, -0.0145,  0.0494],\n",
      "         [ 0.1403, -0.1186, -0.2213,  ..., -0.2071,  0.0530,  0.0926],\n",
      "         ...,\n",
      "         [ 0.2821, -0.1012, -0.2207,  ..., -0.0982, -0.0335,  0.0330],\n",
      "         [ 0.1726, -0.0380, -0.2359,  ..., -0.1217, -0.0079,  0.0006],\n",
      "         [ 0.1809,  0.0641, -0.1519,  ..., -0.0579,  0.0558, -0.0827]]]))\n",
      "len(hidden): 2\n",
      "h是 hidden[0].shape: torch.Size([1, 128, 128])\n",
      "c是 hidden[1].shape: torch.Size([1, 128, 128])\n",
      "x.shape: torch.Size([128, 128])\n",
      "是否相等: True\n",
      "输出形状: torch.Size([128, 1])\n"
     ]
    }
   ],
   "source": [
    "# 设置设备\n",
    "device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\n",
    "print(f\"使用设备: {device}\")\n",
    "# 验证模型的前向计算\n",
    "# 从训练数据中获取一个批次的样本\n",
    "sample_batch, sample_labels = next(iter(train_dataloader))\n",
    "print(f\"输入形状: {sample_batch.shape}\")\n",
    "\n",
    "# 将样本移动到设备上\n",
    "sample_batch = sample_batch.to(device)\n",
    "\n",
    "# 进行前向计算\n",
    "with torch.no_grad():\n",
    "    outputs = model(sample_batch)\n",
    "    print(f\"输出形状: {outputs.shape}\")\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "f9f4f8f8",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T09:27:50.047400Z",
     "start_time": "2025-07-04T09:27:50.044500Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型各层参数尺寸:\n",
      "embedding.weight: torch.Size([10000, 16])\n",
      "lstm.weight_ih_l0: torch.Size([512, 16])\n",
      "lstm.weight_hh_l0: torch.Size([512, 128])\n",
      "lstm.bias_ih_l0: torch.Size([512])\n",
      "lstm.bias_hh_l0: torch.Size([512])\n",
      "fc1.weight: torch.Size([128, 128])\n",
      "fc1.bias: torch.Size([128])\n",
      "fc.weight: torch.Size([1, 128])\n",
      "fc.bias: torch.Size([1])\n",
      "\n",
      "LSTM层详细信息:\n",
      "- weight_ih_l0: torch.Size([512, 16])\n",
      "- weight_hh_l0: torch.Size([512, 128])\n",
      "- bias_ih_l0: torch.Size([512])\n",
      "- bias_hh_l0: torch.Size([512])\n"
     ]
    }
   ],
   "source": [
    "# 定义一个函数来输出模型每层的参数尺寸\n",
    "def print_model_layers_shapes(model):\n",
    "    print(\"模型各层参数尺寸:\")\n",
    "    for name, param in model.named_parameters():\n",
    "        print(f\"{name}: {param.shape}\")\n",
    "\n",
    "# 对当前模型进行参数尺寸分析\n",
    "print_model_layers_shapes(model)\n",
    "\n",
    "\n",
    "# 对lstm层参数尺寸的详细解释\n",
    "print(f\"\\nLSTM层详细信息:\")\n",
    "for name, param in model.lstm.named_parameters():\n",
    "    print(f\"- {name}: {param.shape}\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "79e9ab6d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "双层单向lstm模型结构:\n",
      "SentimentClassifier(\n",
      "  (embedding): Embedding(10000, 16)\n",
      "  (lstm): LSTM(16, 128, num_layers=2, batch_first=True, dropout=0.3)\n",
      "  (fc1): Linear(in_features=128, out_features=128, bias=True)\n",
      "  (fc): Linear(in_features=128, out_features=1, bias=True)\n",
      "  (dropout): Dropout(p=0.3, inplace=False)\n",
      ")\n",
      "双层单向lstm模型参数数量: 383,489\n",
      "\n",
      "双层单向lstm层详细信息:\n",
      "- weight_ih_l0: torch.Size([512, 16])\n",
      "- weight_hh_l0: torch.Size([512, 128])\n",
      "- bias_ih_l0: torch.Size([512])\n",
      "- bias_hh_l0: torch.Size([512])\n",
      "- weight_ih_l1: torch.Size([512, 128])\n",
      "- weight_hh_l1: torch.Size([512, 128])\n",
      "- bias_ih_l1: torch.Size([512])\n",
      "- bias_hh_l1: torch.Size([512])\n"
     ]
    }
   ],
   "source": [
    "# 初始化双层单向lstm模型\n",
    "two_layer_model = SentimentClassifier(vocab_size, lstm_layers=2, bidirectional=False)\n",
    "print(f\"双层单向lstm模型结构:\\n{two_layer_model}\")\n",
    "\n",
    "# 计算双层单向lstm模型参数数量\n",
    "print(f\"双层单向lstm模型参数数量: {count_parameters(two_layer_model):,}\")\n",
    "\n",
    "# 对双层单向lstm层参数尺寸的详细解释\n",
    "print(f\"\\n双层单向lstm层详细信息:\")\n",
    "for name, param in two_layer_model.lstm.named_parameters():\n",
    "    print(f\"- {name}: {param.shape}\")\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b377aafe",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "双向lstm模型结构:\n",
      "SentimentClassifier(\n",
      "  (embedding): Embedding(10000, 16)\n",
      "  (lstm): LSTM(16, 128, batch_first=True, bidirectional=True)\n",
      "  (fc1): Linear(in_features=256, out_features=128, bias=True)\n",
      "  (fc): Linear(in_features=128, out_features=1, bias=True)\n",
      "  (dropout): Dropout(p=0.3, inplace=False)\n",
      ")\n",
      "双层双向lstm模型参数数量: 342,529\n",
      "\n",
      "双向lstm层详细信息:\n",
      "- weight_ih_l0: torch.Size([512, 16])\n",
      "- weight_hh_l0: torch.Size([512, 128])\n",
      "- bias_ih_l0: torch.Size([512])\n",
      "- bias_hh_l0: torch.Size([512])\n",
      "- weight_ih_l0_reverse: torch.Size([512, 16])\n",
      "- weight_hh_l0_reverse: torch.Size([512, 128])\n",
      "- bias_ih_l0_reverse: torch.Size([512])\n",
      "- bias_hh_l0_reverse: torch.Size([512])\n"
     ]
    }
   ],
   "source": [
    "# 初始化双向lstm模型\n",
    "bidirectional_model = SentimentClassifier(vocab_size, lstm_layers=1, bidirectional=True)\n",
    "print(f\"双向lstm模型结构:\\n{bidirectional_model}\")\n",
    "\n",
    "# 计算双向lstm模型参数数量\n",
    "print(f\"双层双向lstm模型参数数量: {count_parameters(bidirectional_model):,}\")\n",
    "\n",
    "\n",
    "# 对双向lstm层参数尺寸的详细解释\n",
    "print(f\"\\n双向lstm层详细信息:\")\n",
    "for name, param in bidirectional_model.lstm.named_parameters():\n",
    "    print(f\"- {name}: {param.shape}\")\n",
    "    \n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f6b527a4",
   "metadata": {},
   "source": [
    "# 训练，画图，评估"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "4f63a223",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T11:27:19.773515Z",
     "start_time": "2025-07-04T11:10:48.011324Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "模型结构:\n",
      "SentimentClassifier(\n",
      "  (embedding): Embedding(10000, 16)\n",
      "  (lstm): LSTM(16, 128, batch_first=True, bidirectional=True)\n",
      "  (fc1): Linear(in_features=256, out_features=128, bias=True)\n",
      "  (fc): Linear(in_features=128, out_features=1, bias=True)\n",
      "  (dropout): Dropout(p=0.3, inplace=False)\n",
      ")\n",
      "训练开始，共3920步\n"
     ]
    },
    {
     "data": {
      "application/vnd.jupyter.widget-view+json": {
       "model_id": "ef91c8c3a9144cff957a9dd69e53036d",
       "version_major": 2,
       "version_minor": 0
      },
      "text/plain": [
       "  0%|          | 0/3920 [00:00<?, ?it/s]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[32], line 22\u001b[0m\n\u001b[0;32m     19\u001b[0m early_stopping \u001b[38;5;241m=\u001b[39m EarlyStopping(patience\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m5\u001b[39m, delta\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m0.001\u001b[39m)\n\u001b[0;32m     20\u001b[0m model_saver \u001b[38;5;241m=\u001b[39m ModelSaver(save_dir\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mweights\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m---> 22\u001b[0m model, record_dict \u001b[38;5;241m=\u001b[39m \u001b[43mtrain_two_classification_model\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m     23\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     24\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtrain_loader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtrain_dataloader\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     25\u001b[0m \u001b[43m    \u001b[49m\u001b[43mval_loader\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mval_dataloader\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     26\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcriterion\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcriterion\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     27\u001b[0m \u001b[43m    \u001b[49m\u001b[43moptimizer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptimizer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     28\u001b[0m \u001b[43m    \u001b[49m\u001b[43mdevice\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     29\u001b[0m \u001b[43m    \u001b[49m\u001b[43mnum_epochs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mnum_epochs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     30\u001b[0m \u001b[43m    \u001b[49m\u001b[43meval_step\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43meval_step\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     31\u001b[0m \u001b[43m    \u001b[49m\u001b[43mearly_stopping\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mearly_stopping\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m     32\u001b[0m \u001b[43m    \u001b[49m\u001b[43mmodel_saver\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel_saver\u001b[49m\n\u001b[0;32m     33\u001b[0m \u001b[43m)\u001b[49m\n",
      "File \u001b[1;32md:\\BaiduSyncdisk\\pytorch\\chapter_7_AI\\wangdao_deeplearning_train.py:642\u001b[0m, in \u001b[0;36mtrain_two_classification_model\u001b[1;34m(model, train_loader, val_loader, criterion, optimizer, device, num_epochs, tensorboard_logger, model_saver, early_stopping, eval_step)\u001b[0m\n\u001b[0;32m    639\u001b[0m loss \u001b[38;5;241m=\u001b[39m criterion(logits, labels)\n\u001b[0;32m    641\u001b[0m \u001b[38;5;66;03m# 梯度回传，计算梯度\u001b[39;00m\n\u001b[1;32m--> 642\u001b[0m \u001b[43mloss\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    644\u001b[0m \u001b[38;5;66;03m# 更新模型参数\u001b[39;00m\n\u001b[0;32m    645\u001b[0m optimizer\u001b[38;5;241m.\u001b[39mstep()\n",
      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\torch\\_tensor.py:581\u001b[0m, in \u001b[0;36mTensor.backward\u001b[1;34m(self, gradient, retain_graph, create_graph, inputs)\u001b[0m\n\u001b[0;32m    571\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m has_torch_function_unary(\u001b[38;5;28mself\u001b[39m):\n\u001b[0;32m    572\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m handle_torch_function(\n\u001b[0;32m    573\u001b[0m         Tensor\u001b[38;5;241m.\u001b[39mbackward,\n\u001b[0;32m    574\u001b[0m         (\u001b[38;5;28mself\u001b[39m,),\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    579\u001b[0m         inputs\u001b[38;5;241m=\u001b[39minputs,\n\u001b[0;32m    580\u001b[0m     )\n\u001b[1;32m--> 581\u001b[0m \u001b[43mtorch\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mautograd\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mbackward\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    582\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mgradient\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43minputs\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minputs\u001b[49m\n\u001b[0;32m    583\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\torch\\autograd\\__init__.py:347\u001b[0m, in \u001b[0;36mbackward\u001b[1;34m(tensors, grad_tensors, retain_graph, create_graph, grad_variables, inputs)\u001b[0m\n\u001b[0;32m    342\u001b[0m     retain_graph \u001b[38;5;241m=\u001b[39m create_graph\n\u001b[0;32m    344\u001b[0m \u001b[38;5;66;03m# The reason we repeat the same comment below is that\u001b[39;00m\n\u001b[0;32m    345\u001b[0m \u001b[38;5;66;03m# some Python versions print out the first line of a multi-line function\u001b[39;00m\n\u001b[0;32m    346\u001b[0m \u001b[38;5;66;03m# calls in the traceback and some print out the last line\u001b[39;00m\n\u001b[1;32m--> 347\u001b[0m \u001b[43m_engine_run_backward\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    348\u001b[0m \u001b[43m    \u001b[49m\u001b[43mtensors\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    349\u001b[0m \u001b[43m    \u001b[49m\u001b[43mgrad_tensors_\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    350\u001b[0m \u001b[43m    \u001b[49m\u001b[43mretain_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    351\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcreate_graph\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    352\u001b[0m \u001b[43m    \u001b[49m\u001b[43minputs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[0;32m    353\u001b[0m \u001b[43m    \u001b[49m\u001b[43mallow_unreachable\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m    354\u001b[0m \u001b[43m    \u001b[49m\u001b[43maccumulate_grad\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m,\u001b[49m\n\u001b[0;32m    355\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\torch\\autograd\\graph.py:825\u001b[0m, in \u001b[0;36m_engine_run_backward\u001b[1;34m(t_outputs, *args, **kwargs)\u001b[0m\n\u001b[0;32m    823\u001b[0m     unregister_hooks \u001b[38;5;241m=\u001b[39m _register_logging_hooks_on_whole_graph(t_outputs)\n\u001b[0;32m    824\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 825\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mVariable\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_execution_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrun_backward\u001b[49m\u001b[43m(\u001b[49m\u001b[43m  \u001b[49m\u001b[38;5;66;43;03m# Calls into the C++ engine to run the backward pass\u001b[39;49;00m\n\u001b[0;32m    826\u001b[0m \u001b[43m        \u001b[49m\u001b[43mt_outputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\n\u001b[0;32m    827\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m  \u001b[38;5;66;03m# Calls into the C++ engine to run the backward pass\u001b[39;00m\n\u001b[0;32m    828\u001b[0m \u001b[38;5;28;01mfinally\u001b[39;00m:\n\u001b[0;32m    829\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m attach_logging_hooks:\n",
      "\u001b[1;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "from wangdao_deeplearning_train import train_two_classification_model, evaluate_two_classification_model,plot_learning_curves,EarlyStopping,ModelSaver\n",
    "\n",
    "model = SentimentClassifier(vocab_size, lstm_layers=1, bidirectional=True)\n",
    "print(f\"模型结构:\\n{model}\")\n",
    "\n",
    "# 定义损失函数和优化器\n",
    "criterion = nn.BCEWithLogitsLoss() #WithLogitsLoss代表的含义是：把输出结果通过sigmoid函数，然后计算损失\n",
    "optimizer = torch.optim.Adam(model.parameters(), lr=0.001)\n",
    "# 将模型移动到设备上\n",
    "model = model.to(device)\n",
    "\n",
    "\n",
    "# 训练参数\n",
    "num_epochs = 20\n",
    "eval_step = 100\n",
    "\n",
    "# 训练模型\n",
    "# 创建早停和模型保存器\n",
    "early_stopping = EarlyStopping(patience=5, delta=0.001)\n",
    "model_saver = ModelSaver(save_dir='weights')\n",
    "\n",
    "model, record_dict = train_two_classification_model(\n",
    "    model=model,\n",
    "    train_loader=train_dataloader,\n",
    "    val_loader=val_dataloader,\n",
    "    criterion=criterion,\n",
    "    optimizer=optimizer,\n",
    "    device=device,\n",
    "    num_epochs=num_epochs,\n",
    "    eval_step=eval_step,\n",
    "    early_stopping=early_stopping,\n",
    "    model_saver=model_saver\n",
    ")\n",
    "\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "0fb25282",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T11:27:19.851460Z",
     "start_time": "2025-07-04T11:27:19.773515Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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Lx6bKNUxGCIiIiIiopTEYIjIZH/+858xY8YMZGZmYtiwYVi8eDG+//3v46mnnsLf/vY3WCwW9fbWW2+pzz948CC+/OUvo6CgAEVFRbj00kuxf//+Pmft7rnnHpSUlCAvLw/f/OY30dXVFcefkoiIhhIem4gCs/dzOxGF4ejRo7j66qvx4IMP4vLLL0dzczPWrFmDa6+9FjU1NWhqasITTzyhPlcOLk6nE0uWLMGCBQvU59ntdtx///347Gc/iy1btsDhcKjPXb16NTIyMtRBSg5G119/vTqY/fSnP43zT0xERImOxyai/jEYIjL5gNPd3Y0rrrgClZWV6jY5EyfkbFxnZyfKy8u9n//MM8/A7Xbj97//vTojJ+SAJGfi5OBy0UUXqdvkwPP4448jKysL06ZNw7333qvO6N13332wWpngJSKi/vHYRNQ//k8lMtGsWbNwwQUXqIPMl770JTz22GOor6/v9/M//vhjVFdXIzc3Fzk5OepNzsp1dHRgz549fvcrBxuDnK1raWlRZQxEREQD4bGJqH/MDBGZyGazYdWqVVi3bh1ee+01/Md//Ad+/OMfY8OGDQE/Xw4ac+bMwbPPPtvnY1KDTUREFCkem4j6x2CIyGRSUnDWWWept7vuukuVJPz1r39V5QQul8vvc08//XSsWLECpaWlqvl0oLN07e3tqpxBrF+/Xp2pGzVqVNR/HiIiGvp4bCIKjGVyRCaSs2w/+9nP8MEHH6im1L/85S+ora3FlClTMGbMGNV4unv3btTV1akG1WuuuQbFxcVqSo80qe7bt0/VY3/nO9/BoUOHvPcr03luuOEG7NixAytXrsTdd9+Nm2++mTXZREQ0KB6biPrHzBCRieQM2jvvvIOHH35YTeeRM2+//OUvsXTpUsydO1cdTORSShDefPNNnHvuuerzf/jDH6rGVpnwM2LECFXb7Xs2Tt6fMGECzjnnHNXoKlOBfvKTn8T1ZyUioqGBxyai/lk8Ho9ngI8TUZzJLoeGhga8+OKL8X4oRERECo9NlCyYxyQiIiIiopTEYIiIiIiIiFISy+SIiIiIiCglMTNEREREREQpicEQERERERGlJAZDRERERESUkhgMERERERFRSmIwREREREREKYnBEBERERERpSQGQ0RERERElJIYDBERERERUUpiMEREREREREhF/x/H23Hk6Jp9CQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 1000x500 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 绘制学习曲线\n",
    "plot_learning_curves(record_dict,sample_step=100)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "55a18ae6",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-07-04T11:27:30.240293Z",
     "start_time": "2025-07-04T11:27:19.852479Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "测试集准确率: 75.35%, 测试集损失: 0.5433\n"
     ]
    }
   ],
   "source": [
    "\n",
    "\n",
    "# 在测试集上评估最终模型\n",
    "test_acc, test_loss = evaluate_two_classification_model(model, test_dataloader, device, criterion)\n",
    "print(f\"测试集准确率: {test_acc:.2f}%, 测试集损失: {test_loss:.4f}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
